Mads, That did help indeed. After invoking the gc() function, the callback was invoked as expected.
Is there somewhere a comprehensive list of flags accepted by the VM? I've look around and find lots of them sprinkled about in test cases, wiki pages, and other documents, but nowhere a single list. Does such a beast exist? cheers, Charles On Apr 8, 2:28 pm, Mads Sig Ager <[email protected]> wrote: > Repeatedly calling IdleNotification in this way is not guaranteed to > force a garbage collection. If little has happened it will not. In > order to experiment with this you could use SetFlagsFromSting and pass > in --expose-gc. That will install a gc function in the global object > so you can force a gc by executing the js code "gc()". > > Hope this helps. > > -- Mads > > > > > > > > On Fri, Apr 8, 2011 at 9:20 PM, Charles Lowell <[email protected]> > wrote: > > Anton, > > > I updated the snippet to try replicating your suggestion, but was > > still unable to get the WeakReferenceCallback to be invoked. > > >https://gist.github.com/908831 > > > I would have expected the callback to have been invoked when GC is > > forced the first time after making the object handle weak. Is the > > Context is holding a strong reference to the object? > > > cheers, > > Charles > > > On Apr 8, 5:13 am, Anton Muhin <[email protected]> wrote: > >> Charles, > > >> Contexts have complicated lifetime. If you just curious how weak > >> handles work, you'd better play with simpler objects. > > >> Handle goes near death state when it found out it references weakly > >> reachable object. You're callback is never invoked as v8 retains the > >> context (it's a current context) and hence strongly reachable from > >> inside v8. Value is base type, so everything is an instance of Value. > > >> Please note that you have a bug in your code: your weak callback must > >> either dispose the handle passed or revive it. > > >> And, just in case, most of objects are created and returned back in > >> Local handles. Those handles live as long as handle scope to which > >> they belong and retain the object. Thus the code: > > >> HandleScope hs; > >> Persistent p = Persistent::New(Object::New()); > >> p.MakeWeak(...) > >> // Force GC > > >> will never trigger weak callback as l is alive and it retains the > >> object. The right way: > > >> Persistent p; > >> { > >> HandleScope hs; > >> p = Persistent::New(Object::New());} > > >> p.MakeWeak(...) > >> // Force GC > > >> hth and yours, > >> anton. > > >> On Fri, Apr 8, 2011 at 1:59 AM, Charles Lowell <[email protected]> > >> wrote: > >> > Hi, > > >> > I'm having trouble understanding when a Persistent handle is > >> > considered "Near Death", and when exactly a weak reference callback is > >> > invoked. Consider the following code: > > >> >https://gist.github.com/908831 > > >> > It appears that the WeakReference Callback is never invoked. > > >> > I guess my questions are > > >> > 1) Why is it never considered near death? given that there is only one > >> > reference to it which is weak. > > >> > 2) why isn't the PrintlnWeakReferenceCallback ever invoked? > > >> > 3) WeakReferenceCallbacks take a Persistent<Value> as a parameter. > >> > What if, as in this case, the object is not a Value? > > >> > cheers, > >> > Charles > > >> > -- > >> > 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 -- v8-users mailing list [email protected] http://groups.google.com/group/v8-users
