2013-11-28 27 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