[webkit-dev] JavaScript memory management question

Maciej Stachowiak mjs at apple.com
Thu Dec 4 13:06:08 PST 2008

On Dec 4, 2008, at 12:55 PM, Matt Fischer wrote:

> I'm working on an embedded product which uses a WebKit-based  
> browser, and I've been tracking down some memory leaks we're  
> seeing.  After a long while of digging through the codebase, I've  
> been able to determine that we're occasionally leaking the  
> WebCore::Document object when leaving certain websites.  A bit more  
> tracing reveals that the Document object is being retained because  
> an HTMLImageElement holds a DocPtr reference on it, and the element  
> isn't going away when the normal refcount on the Document drops to  
> 0.  This pins the Document object in memory.
> The specific site I've been testing with is www.yahoo.com.   
> Examining the source code to that page reveals the following in the  
> page's beforeUnload event:
> window.onbeforeunload=function(){
> var img=new Image;
> now=new Date;
> t6=now.getTime();
> img.src='http://www.yahoo.com/'+(ylp?ylp:'p.gif?t=0')+cc+'&tid='+ver 
> +'&ni='+document.images.length+'&sss='+sss+'&t1='+t1+'&d1='+(t2- 
> t1)+'&d2='+(t3-t1)+'&d3='+(t4-t1)+'&d4='+(t5-t1)+'&d5='+(t6-t1)  
> +'&d6='+(t7-t1)+'&d7='+(t8-t1)+'&d8='+(t9-t1)+'&d9='+(t10- 
> t1)+'&d10='+(t11-t1)+'&d11='+(t12-t1);
> }
> It appears that this Image object is never being removed--I can  
> repeatedly navigate to and from this site and watch  
> HTMLImageElements (and their associated Document objects) pile up.
> I'm still not convinced this is a WebKit problem specifically  
> (there's a fair amount of code surrounding it in our product that  
> could potentially have bugs in it), but to continue tracing the  
> problem, I need to know what the mechanism is that *ought* to be  
> freeing this object.  I presume this is something that should be  
> taken care of by the JavaScript garbage collector, however I can see  
> JavaScriptCore::Collector::collect() calls running occasionally  
> after this object is created, and it never goes away.  Is there some  
> immediately apparent reason why this wouldn't be happening?  I.e.,  
> is there something else that would be holding a reference to an  
> object created by this type of script code, or is something other  
> than the GC responsible for freeing it, etc?
> My apologies if this turns out to be a stupid question--I'm just  
> trying to get some context for where I ought to focus next.

Have you tried it on WebKit trunk? I think this this is fixed by r37922.

  - Maciej

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-dev/attachments/20081204/52071f81/attachment.html>

More information about the webkit-dev mailing list