內(nèi)存泄漏問題與垃圾回收機制

    內(nèi)存泄漏:一塊被分配的內(nèi)存既不能使用又不能被釋放

內(nèi)存泄漏的幾種情況
1.頁面中元素被移除或替換時,元素綁定的時間仍然存在

<div id="div1">
    <input type="button" name="" value="clickMe" id="btn1">
</div>
<script type="text/javascript">
    var oButton = document.getElementById('btn1');
    oButton.onclick=function(){
        document.getElementById('div1').innerHTML="processing....";
    };
</script>

解決:在onclick事件中將oButton.onclick=null;手動釋放
2.兩個DOM節(jié)點或ActiveX對象相互引用,在IE中垃圾回收系統(tǒng)不會發(fā)現(xiàn)他們之間循環(huán)關系與系統(tǒng)中其他對象是隔離的并釋放他們,最終他們將被保留在內(nèi)存中,直到瀏覽器關閉
3.閉包也會引起內(nèi)存泄漏
解決在確定某個變量不會再次被引用。手動釋放其內(nèi)存,即將此變量設置為null

垃圾回收機制

js中垃圾回收機制有兩種:
1.標記清除:最常用!
垃圾收集器會在運行的時候給存儲在內(nèi)存的所有變量加上一個標記,然后會去掉環(huán)境中的變量以及環(huán)境中被引用的變量,在此之后再被加上標記的變量就是為準備刪除的變量
2.引用計數(shù)
跟蹤記錄每一個個值的被引用次數(shù),當一個值引用次數(shù)為0時,回收
但是這種方法有一個很嚴重的問題??!循環(huán)引用
循環(huán)引用就是對象A中包含一個指向?qū)ο驜的指針,而對象B中又包含一個指向A的指針,他們的引用次數(shù)永遠不會是0

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容