js記憶體洩露
js記憶體洩露
js記憶體的機制
- js的基本變數 boolean string number null undefined symbol 是分配在棧上的
- js的引用型別是分配在堆上面的
- 記憶體洩露只會發生在對堆區
js記憶體回收機制
js是用標記清楚法,部分Ie低版本使用引用計數法進行垃圾回收
上面叫記憶體洩露呢?
記憶體洩露就是 記憶體洩漏是指我們已經無法再通過js程式碼來引用到某個物件,但垃圾回收器卻認為這個物件還在被引用,因此在回收的時候不會釋放它 上面這句話就說成了記憶體洩露的根本
下面分析一段記憶體洩露的程式碼
var demo = document.getElementById('demo');;
var username = {name: 'username'}; //在堆上面生成一個物件
demo.onclick = function() {
this.innerHTML = username.name; //這裡面對username進行引用
}
username = null; //username 置為空 var demo = document.getElementById('demo');;
var username = {name: 'username'}; //在堆上面生成一個物件
demo.onclick = function() {
this.innerHTML = username.name; //這裡面對username進行引用
}
username = null; //username 置為空
上面的程式碼傳送記憶體洩露了麼?
確實是發生了, onclick函式裡面引用username, js解析器會標記這個堆地址在onclick裡面會有引用, 雖然最後我們設定username = null, onclick裡面的標記並沒有清楚,即我們無法通過程式碼進行引用到之前建立的username對應的堆的這個地址,也無法清楚js解析器標記的,onclick裡面對這個堆地址的引用。所以發生記憶體洩露
那如何才能避免發生這樣情況呢? 有兩種,一種是保證 這個堆地址能被我們js程式碼控制,另外一個的話,由於是onclick發生洩露,所以我們可以 設定 onclick = null
再來看另外一個情況
function bindEvent()
{
var obj = document.createElement("XXX");
obj.onclick = function(){
// ...
}
}
bindEvent();
上面的傳送洩露了麼? 發生了,注意是這個dom上面的onclick函式比較特殊,它會把
onclick函式註冊到外面去,相當於閉包暴露在外面了,所以bindEvent會建立一個閉包,而且對於裡面生成的的obj,我們是無法引用的到的,所以發生了記憶體洩露
相關文章
- js記憶體洩露的原因JS記憶體洩露
- 記憶體洩露記憶體洩露
- nodejs爬蟲記憶體洩露排查NodeJS爬蟲記憶體洩露
- Js記憶體洩露問題總結JS記憶體洩露
- JavaScript記憶體洩露JavaScript記憶體洩露
- 記憶體洩露嗎記憶體洩露
- 記憶體溢位和記憶體洩露記憶體溢位記憶體洩露
- Lowmemorykiller記憶體洩露分析記憶體洩露
- 前端面試題51----JS記憶體洩露前端面試題JS記憶體洩露
- 如何除錯 Node.js的記憶體洩露除錯Node.js記憶體洩露
- 檢視 Node.js 中的記憶體洩露Node.js記憶體洩露
- 使用 mtrace 分析 “記憶體洩露”記憶體洩露
- 實戰Go記憶體洩露Go記憶體洩露
- Java記憶體洩露的原因Java記憶體洩露
- JAVA 記憶體洩露的理解Java記憶體洩露
- IE中的記憶體洩露記憶體洩露
- 學習Java:記憶體洩露Java記憶體洩露
- 記一次Go websocket 專案記憶體洩露排查 + 使用Go pprof定位記憶體洩露GoWeb記憶體洩露
- js引起記憶體洩露的幾種情況分析JS記憶體洩露
- Android 記憶體洩露詳解Android記憶體洩露
- 線上記憶體洩露定位--memleak工具記憶體洩露
- Pprof定位Go程式記憶體洩露Go記憶體洩露
- Android 檢測記憶體洩露Android記憶體洩露
- 如何處理 JavaScript 記憶體洩露JavaScript記憶體洩露
- leaks工具查詢記憶體洩露記憶體洩露
- 記憶體洩露引起的問題記憶體洩露
- MFC記憶體洩露與檢測記憶體洩露
- 如何定位和解決記憶體洩露記憶體洩露
- JavaScript中的記憶體洩露模式JavaScript記憶體洩露模式
- ThreaLocal記憶體洩露的問題記憶體洩露
- JVM與記憶體洩露問題JVM記憶體洩露
- js記憶體洩漏JS記憶體
- Linux記憶體洩露案例分析和記憶體管理分享Linux記憶體洩露
- 如何避免JavaScript的記憶體洩露及記憶體管理技巧JavaScript記憶體洩露
- win10驅動記憶體洩露如何解決_win10記憶體洩露處理方法Win10記憶體洩露
- 乾貨分享:淺談記憶體洩露記憶體洩露
- java中如何檢視記憶體洩露Java記憶體洩露
- 解決git記憶體洩露問題Git記憶體洩露