I also creates SO question regarding v8 behavior with some code attached, please see: http://stackoverflow.com/questions/34694591/v8-impossible-to-free-memory-allocated-by-context
On Sat, Jan 9, 2016 at 4:37 PM, Sergey F. <[email protected]> wrote: > From my tests V8 disposes memory only when I'm calling isolate->Dispose() > Is it ever possible to dispose memory on per context basis? > > On Sat, Jan 9, 2016 at 4:34 PM, Sergey F. <[email protected]> wrote: > >> Also one note, I do not wish to dispose the whole isolate >> I would like to dispose the context only >> My usage pattern: >> - create fixed pool of isolates(= cores count) >> - allocate/dispose contexts to execute user-defined code >> >> On Sat, Jan 9, 2016 at 4:15 PM, Sergey F. <[email protected]> wrote: >> >>> Thanks very much for the answer, Ben! >>> >>> Hm... looks like there is some other problem with my v8 usage, I just >>> made a quick check: >>> - made huge allocation of memory within the context(around 1 gb) >>> - do some work >>> - call .Reset() on all persistent handles and manually remove c++ >>> allocated memory >>> - memory allocated by context aren't being freed by V8 >>> >>> I just somehow thought it would be totally reasonable to expect v8 to >>> call my SetWeak callbacks when the context(and all dedicated objects within >>> their c++ counterparts) are being disposed >>> As far as I know V8 must dispose all context-allocated memory when I'm >>> calling Reset on context persistent handle(no other references to it) >>> Looks like I'm missing something fundamental >>> >>> What is the proper way to dispose V8 context and free all js-allocated >>> resources that belong to this particular context? >>> >>> Thanks again! >>> >>> On Sat, Jan 9, 2016 at 3:47 PM, Ben Noordhuis <[email protected]> >>> wrote: >>> >>>> On Fri, Jan 8, 2016 at 7:59 PM, Sergey F. <[email protected]> wrote: >>>> > I have v8 integration which allocates some objects on c++ side, wraps >>>> them >>>> > and makes available to js code >>>> > Everything works perfect, when object becomes unreachable v8 GC calls >>>> > SetWeak callback and I'm able to free c++ allocated memory >>>> > >>>> > But when I do context disposal(via calling persistent handle .Reset() >>>> > method) why the remaining SetWeak callbacks aren't being triggered by >>>> v8? >>>> > Should I do this cleanup manually? >>>> > >>>> > Thanks! >>>> >>>> Weak callbacks are not guaranteed to run, so yes, you need to clean up >>>> manually. >>>> >>>> If your persistent handles have a class id, you can iterate over them >>>> with v8::Isolate::VisitHandlesWithClassIds() before disposing the >>>> isolate. >>>> >>>> For per-context cleanup, you'll have to devise something else. You >>>> could assign per-context class ids and filter on them but that may not >>>> be very efficient when there are many contexts. >>>> >>>> -- >>>> -- >>>> v8-users mailing list >>>> [email protected] >>>> http://groups.google.com/group/v8-users >>>> --- >>>> You received this message because you are subscribed to a topic in the >>>> Google Groups "v8-users" group. >>>> To unsubscribe from this topic, visit >>>> https://groups.google.com/d/topic/v8-users/z3bVyJRyCf4/unsubscribe. >>>> To unsubscribe from this group and all its topics, send an email to >>>> [email protected]. >>>> For more options, visit https://groups.google.com/d/optout. >>>> >>> >>> >> > -- -- v8-users mailing list [email protected] http://groups.google.com/group/v8-users --- You received this message because you are subscribed to the Google Groups "v8-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
