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

Reply via email to