On Sun, Oct 24, 2010 at 03:06, Louis Santillan <[email protected]> wrote: > See this response I had posted on nodejs. > http://groups.google.com/group/nodejs/browse_thread/thread/49e016231cec8545/c59858db7ab4079f?lnk=raot&pli=1 > > Specifically, Stephen Beal's wiki has a lengthy, detailed article > written on finalization, destructors, & c++/js interaction.
Thanks for the links. This was a bit interesting: <http://code.google.com/p/v8-juice/wiki/CommentaryOnV8#Criticisms>, but doesn't talk about anything I didn't already know (i.e. give clarity to whether or not C-land allocated objects _can_ be GC'ed). > > -L > > On Saturday, October 23, 2010, Rasmus Andersson <[email protected]> wrote: >> On Sun, Oct 24, 2010 at 00:47, Marco Rogers <[email protected]> wrote: >>> Okay so does this mean that if you actually pass the handle back to js space >>> then it does become eligible for GC? What you set it to a property of an >>> object from js space? >> >> I don't think so. I built a test program which did just that. >> >> 1. Created a function in C-land, >> 2. Exposed it to a v8 script >> 3. Ran the script which called the function >> >> After hitting 1GB res. memory, none of the million instances had been >> released (yes, I yielded to v8 "IdleNotification" so GC could take >> place). >> >> I think you need to _create_ the instance in js-land for it to be >> subject to GC. If you define your own function type using >> FunctionTemplate and providing a custom initializer (usually a >> Handle<Value> New(const Arguments& args)), then when such an object is >> created in js-land, |args.Holder()| will contain an object which has >> been allocated by v8 and should be subject to GC. The problem seems to >> arise when _you_ create the "Holder" object. >> >>> I've been using the v8 API for a while now and I understand the basics (and >>> a bit more). I'm just trying to make sure I understand this particular >>> gotcha and how to avoid it. >> >> Same thing here. Would really appreciate some clarification from >> someone into v8 core dev. :) >> >>> >>> :Marco >>> >>> On Sat, Oct 23, 2010 at 6:40 PM, Rasmus Andersson <[email protected]> wrote: >>>> >>>> On Sat, Oct 23, 2010 at 23:41, Marco Rogers <[email protected]> >>>> wrote: >>>> > Anton, what do you mean by "API functions.."? Which part of his above >>>> > example are you referring to? I admit I'm still not sure what's wrong >>>> > with what Rasmus is doing. >>>> >>>> I believe what Anton is saying is that an object created in C-land >>>> will not be subject to GC. >>>> >>>> Here, we create (i.e. allocate) a Function object using the C++ API: >>>> >>>> HandleScope scope; >>>> Local<Function> fun = Local<Function>::New(...); >>>> Persistent<Function> phandle = Persistent<Function>::New(fun); >>>> phandle.MakeWeak(data, &FinalizationCallback) >>>> >>>> If I understand Anton correctly, this function will never be garbage >>>> collected thus FinalizationCallback never called. Anton, is that >>>> correct? >>>> >>>> And the case v8 create the object for us: >>>> >>>> HandleScope scope; >>>> Local<Value> v = EvalHelper("function(){}"); >>>> Local<Function> fun = Local<Function>::Cast(v); >>>> Persistent<Function> phandle = Persistent<Function>::New(fun); >>>> phandle.MakeWeak(data, &FinalizationCallback) >>>> >>>> But in this case FinalizationCallback will be called. >>>> >>>> Is this correct? >>>> >>>> >>> >>> -- >>> Marco Rogers >>> [email protected] >>> >>> Life is ten percent what happens to you and ninety percent how you respond >>> to it. >>> - Lou Holtz >>> >>> -- >>> v8-users mailing list >>> [email protected] >>> http://groups.google.com/group/v8-users >> >> >> >> -- >> Rasmus Andersson >> >> -- >> v8-users mailing list >> [email protected] >> http://groups.google.com/group/v8-users > > -- > v8-users mailing list > [email protected] > http://groups.google.com/group/v8-users > -- Rasmus Andersson -- v8-users mailing list [email protected] http://groups.google.com/group/v8-users
