RESOLVED FIXED 34864
Many objects left uncollected after visiting mail.google.com and closing window
https://bugs.webkit.org/show_bug.cgi?id=34864
Summary Many objects left uncollected after visiting mail.google.com and closing window
Geoffrey Garen
Reported 2010-02-11 15:54:13 PST
Many objects left uncollected after visiting mail.google.com and closing window
Attachments
Patch (6.55 KB, patch)
2010-02-11 15:54 PST, Geoffrey Garen
ggaren: review+
Patch (3.16 KB, patch)
2010-02-11 20:36 PST, Geoffrey Garen
oliver: review+
Geoffrey Garen
Comment 1 2010-02-11 15:54:28 PST
Geoffrey Garen
Comment 2 2010-02-11 18:51:47 PST
Geoffrey Garen
Comment 3 2010-02-11 20:36:12 PST
Geoffrey Garen
Comment 4 2010-02-11 20:38:21 PST
Reopening to post the second half of this fix.
Oliver Hunt
Comment 5 2010-02-11 20:40:49 PST
Comment on attachment 48619 [details] Patch r=me
Darin Adler
Comment 6 2010-02-11 20:42:05 PST
Comment on attachment 48619 [details] Patch > + Don't unconditionally hang onto small strings. Instead, hang onto all > + small strings as long as any small string is still referenced. What is the reasoning for that rule? I'm sure it's a good idea, but I think SmallStrings::markChildren should have a "why" comment in it explaining why it is. > + if (isMarked(m_singleCharacterStrings[i])) > + isAnyStringMarked = true; I suggest just doing assignment here instead of an if statement to save a branch.
Geoffrey Garen
Comment 7 2010-02-11 21:01:14 PST
Geoffrey Garen
Comment 8 2010-02-11 21:02:50 PST
> What is the reasoning for that rule? I'm sure it's a good idea, but I think > SmallStrings::markChildren should have a "why" comment in it explaining why it > is. Added this comment: /* Our hypothesis is that small strings are very common. So, we cache them to avoid GC churn. However, in cases where this hypothesis turns out to be false -- including the degenerate case where all JavaScript execution has terminated -- we don't want to waste memory. To test our hypothesis, we check if any small string has been marked. If so, it's probably reasonable to mark the rest. If not, we clear the cache. */ > > + if (isMarked(m_singleCharacterStrings[i])) > > + isAnyStringMarked = true; > > I suggest just doing assignment here instead of an if statement to save a > branch. Fixed.
Note You need to log in before you can comment on or make changes to this bug.