2013-11-28 25 views
0

我有一些像下面的代码。内存泄漏location.reload

var domNode = somehowGet(); 

domNode.someEvent = function(){ 
    domNode.appendChild(createNodeUsing(window)); 
}; 

window.guid = createGuid(); // called at startup 

后,我打电话location.reload我打开DevTools探查,看到一些独立式树节点和额外的窗口实例,它们的量是重载的数量完全相同。 也就是说如果我调用5次location.reload,则会有5个额外的Window对象实例,并且它们都有不同的Guid。

现在的问题是 - 如果没有其他的domNode引用,GC会释放内存,除了那些,我上面显示的?

换句话说,我需要知道为什么有几个窗口实例

浏览器是铬一些最新的版本。

+0

还有更多的10 MB这样的代码,我无法以可预测的时间框架以适当的方式修复它。我需要知道这样的代码是否会导致内存泄漏。 –

回答

0

domNode.someEvent = function(){}是一个循环参考模式。 domNode获得了someEvent的引用,这是一个属性,在这个someEvent函数中,domNode仍然是可引用的(作为闭包)。

我不确定chrome是否可以回收内存,但我认为应该避免使用这种模式。

查看更多详情。 http://javascript.info/tutorial/memory-leaks#ie-lt-8-dom-js-memory-leak