瀏覽器內存泄漏簡單知識點

什麼是內存泄漏
不再用到的內存,沒有及時釋放,就叫做內存泄漏。

在 js中,詳細一點說就是指我們已經無法再通過js代碼來引用到某個對象,但垃圾回收器卻認爲這個對象還在被引用,因此在回收的時候不會釋放它。導致了分配的這塊內存永遠也無法被釋放出來。如果這樣的情況越來越多,會導致頁面卡頓或系統崩潰。

垃圾回收機制
js 引擎爲了解決內存泄漏問題,纔有了垃圾回收機制,能夠讓 js 自動的管理內存,將內存中不在使用的變量回收掉,然後釋放出內存空間。

兩種回收機制,一個是標記清除法,另一種是引用計數法,其實他兩的實現原理我們只明白一點就是都是通過判斷當前的變量是否被引用,如果沒有被引用,就說明該變量應該被回收,怎麼回收就是上邊說得兩種策略的事情了。

什麼是引用?
所謂的引用就是存儲在堆內存中的對象你是直接不能訪問的,而是通過棧內存中存儲該對象的地址進行訪問的,該地址就保持着對該對象的引用。

就好比一個盒子,盒子裏有一塊糖,糖和盒子外部有一根繩子連接着,如果你想直接打開盒子取出糖,不好意思,盒子被上鎖了,如果你通過繩子將糖從盒子的小孔中取出來是可以的,就相當於我們所說的引用,糖就是所謂的對象,盒子相當於堆內存。

閉包真的會產生內存泄漏?

閉包就是一個函數,這個函數能夠訪問其他函數的作用域中的變量

function outer() {
     var  a = '變量1'
     var  inner = function () {
            console.info(a)
     }
    return inner    // inner 就是一個閉包函數,因爲他能夠訪問到outer函數的作用域
}

許多博客都將原因歸結爲閉包產生了內存泄漏。其實內存泄漏並不是閉包造成的,而是由於閉包內的函數對變量的引用,閉包不是真正產生內存泄漏的原因!實際遇到的閉包產生內存泄漏問題的根本原因是沒有及時的斷開對變量的引用,而不是註冊監聽事件的閉包產生的內存泄漏

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章