Updates:
        Cc: [email protected]

Comment #10 on issue 2471 by [email protected]: Regression: Bogus retaining paths in a heap snapshot
http://code.google.com/p/v8/issues/detail?id=2471

My guess would be that this path is through raw_stack trace accumulated for new Error().stack used in goog.Disposable implementation.

In general we would expect it to be released after the formatting but I think the one shot getter for .stack property itself got stuck in the IC and retained the value through its context.

There are multiple indications supporting this hypothesis: the issue disappears with --nouse-ic, the issue disappears if only one object is allocated (IC is premonomorphic) or if >2 objects are allocated (IC becomes megamorphic).

I think r12933 is partially responsible for this regression because it killed the layer of indirection (DefineOneShotAccessor) that tried to ensure that as little data is retained as possible after accessor has fired by releasing the factory function. Current implementation of one-shot-getter does not null-out raw_stack so values leak if getter itself is stuck somewhere (e.g. in monomorphic IC).

This regression is unpleasant but it is unlikely to be in issue in the real world because IC is unlikely to stay monomorphic (more than 2 objects inherited from Disposable will be allocated).

--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to