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,我們是無法引用的到的,所以發生了記憶體洩露
相關文章
- SHBrowseForFolder 記憶體洩露記憶體洩露
- 記憶體溢位和記憶體洩露記憶體溢位記憶體洩露
- Lowmemorykiller記憶體洩露分析記憶體洩露
- 前端面試題51----JS記憶體洩露前端面試題JS記憶體洩露
- 使用 mtrace 分析 “記憶體洩露”記憶體洩露
- 實戰Go記憶體洩露Go記憶體洩露
- Android 記憶體洩露詳解Android記憶體洩露
- js記憶體洩漏JS記憶體
- Linux記憶體洩露案例分析和記憶體管理分享Linux記憶體洩露
- ArkTS 的記憶體快照與記憶體洩露除錯記憶體洩露除錯
- nodejs爬蟲記憶體洩露排查NodeJS爬蟲記憶體洩露
- Pprof定位Go程式記憶體洩露Go記憶體洩露
- 一文徹底搞懂js垃圾回收和記憶體洩露JS記憶體洩露
- win10驅動記憶體洩露如何解決_win10記憶體洩露處理方法Win10記憶體洩露
- android Handler導致的記憶體洩露Android記憶體洩露
- netty 堆外記憶體洩露排查盛宴Netty記憶體洩露
- 乾貨分享:淺談記憶體洩露記憶體洩露
- 解決git記憶體洩露問題Git記憶體洩露
- Spring Boot heapdump洩露記憶體分析方法Spring Boot記憶體
- 線上記憶體洩露定位--memleak工具記憶體洩露
- java中如何檢視記憶體洩露Java記憶體洩露
- 記一次"記憶體洩露"排查過程記憶體洩露
- 簡單的記憶體“洩露”和“溢位”記憶體
- JAVA記憶體洩露的原因及解決Java記憶體洩露
- 一個 Vue 頁面的記憶體洩露分析Vue記憶體洩露
- 一個Vue頁面的記憶體洩露分析Vue記憶體洩露
- C程式記憶體洩露檢測工具——ValgrindC程式記憶體洩露
- Android效能最佳化之記憶體洩露Android記憶體洩露
- Python實現記憶體洩露排查的示例Python記憶體洩露
- 小題大做 | Handler記憶體洩露全面分析記憶體洩露
- 記一次 .NET 某工控軟體 記憶體洩露分析記憶體洩露
- ThreadLocal原始碼解讀和記憶體洩露分析thread原始碼記憶體洩露
- 使用mtrace追蹤JVM堆外記憶體洩露JVM記憶體洩露
- 一次Kafka記憶體洩露排查經過Kafka記憶體洩露
- 利用dotnet-dump分析docker容器記憶體洩露Docker記憶體洩露
- 從記憶體洩露、記憶體溢位和堆外記憶體,JVM優化引數配置引數記憶體洩露記憶體溢位JVM優化
- react 記憶體洩露常見問題解決方案React記憶體洩露
- 案例:隱秘而低調的記憶體洩露(OOM)記憶體洩露OOM
- ThreadLocal原始碼解析,記憶體洩露以及傳遞性thread原始碼記憶體洩露