javascript的垃圾回收機(jī)制

垃圾回收器會每隔一段時(shí)間找出那些不再使用的內(nèi)存,然后為其釋放內(nèi)存

標(biāo)記清除方法(mark and sweep), 當(dāng)變量進(jìn)入環(huán)境標(biāo)記為進(jìn)入環(huán)境,離開環(huán)境標(biāo)記為離開環(huán)境,垃圾回收器會在運(yùn)行的時(shí)候給存儲在內(nèi)存中的所有變量加上標(biāo)記,然后去掉環(huán)境中的變量以及被環(huán)境中變量所引用的變量(閉包),在這些完成之后仍存在標(biāo)記的就是要刪除的變量了

引用計(jì)數(shù)方法(reference counting), 在低版本IE中經(jīng)常會出現(xiàn)內(nèi)存泄露,很多時(shí)候就是因?yàn)槠洳捎靡糜?jì)數(shù)方式進(jìn)行垃圾回收。引用計(jì)數(shù)的策略是跟蹤記錄每個(gè)值被使用的次數(shù),當(dāng)聲明了一個(gè) 變量并將一個(gè)引用類型賦值給該變量的時(shí)候這個(gè)值的引用次數(shù)就加1,如果該變量的值變成了另外一個(gè),則這個(gè)值得引用次數(shù)減1,當(dāng)這個(gè)值的引用次數(shù)變?yōu)?的時(shí) 候,說明沒有變量在使用,這個(gè)值沒法被訪問了,因此可以將其占用的空間回收,這樣垃圾回收器會在運(yùn)行的時(shí)候清理掉引用次數(shù)為0的值占用的空間。

在IE中雖然JavaScript對象通過標(biāo)記清除的方式進(jìn)行垃圾回收,但BOM與DOM對象卻是通過引用計(jì)數(shù)回收垃圾的, 也就是說只要涉及BOM及DOM就會出現(xiàn)循環(huán)引用問題。

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

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

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