IE中的記憶體洩露
JavaScript在IE中的記憶體洩露一共有四種情況:
首先要清楚JavaScript中的垃圾回收機制 當一個物件沒有被變數所引用時就會自動回收。
1. 迴圈引用 當兩個物件發生迴圈引用 並且其中一個是DOM物件是就會發生記憶體洩露。
例項程式碼:
一個建構函式需要傳入一個DOM節點
function leak(dom){
this.domLink = dom;
dom.property = this;
}
這樣每次建立一個物件是都會都會發生記憶體洩露。
解決方法:
顯示獲得DOM節點釋放對JavaScript物件的引用。
2. 閉包的使用
function leak(){
var node = document.getElementById("test");
function inner(){
//在這裡使用了node節點
}
node.onclick = inner;
}
解決方法:
這裡如果要釋放掉洩露的記憶體就必須登出繫結的函式,因為inner又是內部元素所以沒有辦法得到。要想 登出掉就必須得有一個引用。可以這樣
node.property = inner;
這樣我們就可以remove這個事件監聽器了。
3. 交叉頁面記憶體洩露
一般發生在動態建立頁面元素並將其插入DOM樹種發生。這種記憶體洩露主要是因為DOM元素插入的順序不對引起 的。 並且即使頁面導向其他頁面或者關閉記憶體也不會被釋放。引起這種洩露的原因是 在DOM節點之間會有一個節 點關係管理的物件 如果一次建立好插入進去就會有關係管理物件 而在插入DOM樹種會繼承DOM樹中的這個物件 以前的就會被釋放掉 就會造成記憶體洩露。 這是IE6一個很嚴重的BUG。
例項程式碼:
var parentNode = document.createElment("div");
var node = document.createElement("div");
//這樣就會引起記憶體洩露
parentNode.appendChild(node);
document.documentElement.appendChild(parentNode);
document.documentElement.removeNode(parentNode);
parentNode.removeNode(node);
//這樣就不會引起記憶體洩露
document.documentElement.appendChild(parentNode);
parentNode.appendChild(node);
4. 貌似洩露
這個是動態修改指令碼檔案裡面的文字內容是會發生記憶體洩露,不過這種洩露會在頁面清空或者轉向時釋放掉內 存。
可以參考下面連結: http://www.cnblogs.com/birdshome/archive/2006/05/28/ie_memoryleak.html
相關文章
- JavaScript中的記憶體洩露模式JavaScript記憶體洩露模式
- 記憶體洩露記憶體洩露
- js記憶體洩露JS記憶體洩露
- JavaScript記憶體洩露JavaScript記憶體洩露
- 記憶體洩露嗎記憶體洩露
- Android中Handler引起的記憶體洩露Android記憶體洩露
- 如何診斷 Java 中的記憶體洩露Java記憶體洩露
- Android 中 Handler 引起的記憶體洩露Android記憶體洩露
- js記憶體洩露的原因JS記憶體洩露
- Java記憶體洩露的原因Java記憶體洩露
- JAVA 記憶體洩露的理解Java記憶體洩露
- 記憶體溢位和記憶體洩露記憶體溢位記憶體洩露
- java中如何檢視記憶體洩露Java記憶體洩露
- Lowmemorykiller記憶體洩露分析記憶體洩露
- Volley中listener導致的記憶體洩露記憶體洩露
- 檢視 Node.js 中的記憶體洩露Node.js記憶體洩露
- 記憶體洩露引起的問題記憶體洩露
- ThreaLocal記憶體洩露的問題記憶體洩露
- 使用 mtrace 分析 “記憶體洩露”記憶體洩露
- 實戰Go記憶體洩露Go記憶體洩露
- 學習Java:記憶體洩露Java記憶體洩露
- JavaScript 中 4 種常見的記憶體洩露陷阱JavaScript記憶體洩露
- Java 中 ThreadLocal 記憶體洩露的例項分析Javathread記憶體洩露
- Android中的Activitys, Threads和記憶體洩露Androidthread記憶體洩露
- 如何避免JavaScript的記憶體洩露及記憶體管理技巧JavaScript記憶體洩露
- 記一次Go websocket 專案記憶體洩露排查 + 使用Go pprof定位記憶體洩露GoWeb記憶體洩露
- python 記憶體洩露的診斷Python記憶體洩露
- Android 記憶體洩露詳解Android記憶體洩露
- 線上記憶體洩露定位--memleak工具記憶體洩露
- Pprof定位Go程式記憶體洩露Go記憶體洩露
- Android 檢測記憶體洩露Android記憶體洩露
- 如何處理 JavaScript 記憶體洩露JavaScript記憶體洩露
- leaks工具查詢記憶體洩露記憶體洩露
- MFC記憶體洩露與檢測記憶體洩露
- 如何定位和解決記憶體洩露記憶體洩露
- JVM與記憶體洩露問題JVM記憶體洩露
- java: web應用中不經意的記憶體洩露JavaWeb記憶體洩露
- android Handler導致的記憶體洩露Android記憶體洩露