IE內存泄露與無法回收研究小結
睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接
一、內存泄露
之前確實看了很多資料,但這位大哥的話可謂畫龍點睛,不是奉承他,一下子就打通了我的任督二脈,請看:
trarck 寫道
IE下的內存泄露原因就是循環引用,IE的垃圾回收器不能很好處理這種引用。
會產生泄露的循環引用,只有孤立的DOM對象(脫離DOM樹)。
孤立的DOM對象間的循環引用,孤立的DOM對象與JS對象的循環引用。
為什么是孤立的DOM對象呢?在離開頁面時(刷新,跳轉)會刪除整個DOM樹,在DOM樹上的對象也會被刪除,就算有循環引用,此時被打斷。
孤立的DOM對象有:一、用JS創建但未加入DOM樹。二、從DOM樹中刪除的。
所以避免泄露,就盡量不要讓這樣的DOM對象產生。
有時候這樣對象又不可避免,那就不要讓這樣對像產生循環引用。
最常見的循環引用是由閉包產生,其執行環境中的變量(包括參數)引用了DOM對象。
看完了這段話,只會戰戰兢兢模仿示例的我立即就自創了一個新的例子。
示例1:
Java代碼
之前確實看了很多資料,但這位大哥的話可謂畫龍點睛,不是奉承他,一下子就打通了我的任督二脈,請看:
trarck 寫道
IE下的內存泄露原因就是循環引用,IE的垃圾回收器不能很好處理這種引用。
會產生泄露的循環引用,只有孤立的DOM對象(脫離DOM樹)。
孤立的DOM對象間的循環引用,孤立的DOM對象與JS對象的循環引用。
為什么是孤立的DOM對象呢?在離開頁面時(刷新,跳轉)會刪除整個DOM樹,在DOM樹上的對象也會被刪除,就算有循環引用,此時被打斷。
孤立的DOM對象有:一、用JS創建但未加入DOM樹。二、從DOM樹中刪除的。
所以避免泄露,就盡量不要讓這樣的DOM對象產生。
有時候這樣對象又不可避免,那就不要讓這樣對像產生循環引用。
最常見的循環引用是由閉包產生,其執行環境中的變量(包括參數)引用了DOM對象。
看完了這段話,只會戰戰兢兢模仿示例的我立即就自創了一個新的例子。
示例1:
Java代碼