javascript
JavaScript垃圾回收机制理解
JS的內(nèi)存的生命周期:
1- JS運(yùn)行程序 分配你所需要的暫時(shí)使用內(nèi)存大小。
2- JS運(yùn)行程序 在每次創(chuàng)建字符串、對(duì)象的時(shí)候,程序都會(huì)分配新內(nèi)存來(lái)存儲(chǔ)那個(gè)實(shí)體。
3- JS運(yùn)行程序 對(duì)于不需要使用的內(nèi)存將其釋放。
垃圾回收機(jī)制所存在的意義
在不需要字符串、對(duì)象的時(shí)候,需要釋放其所占用的內(nèi)存,否則將會(huì)消耗完系統(tǒng)中所有可用的內(nèi)存,造成系統(tǒng)崩潰
內(nèi)存泄漏
由于疏忽或錯(cuò)誤造成程序未能釋放那些已經(jīng)不再使用的內(nèi)存,造成內(nèi)存的浪費(fèi)。
垃圾收集機(jī)制的原理
垃圾收集器會(huì)按照固定的時(shí)間間隔,周期性的找出不再繼續(xù)使用的變量,然后釋放其占用的內(nèi)存。
不再使用的變量也就是生命周期結(jié)束的變量,是局部變量,局部變量只在函數(shù)的執(zhí)行過(guò)程中存在,當(dāng)函數(shù)運(yùn)行結(jié)束,沒(méi)有其他引用(閉包),那么該變量會(huì)被標(biāo)記回收。
全局變量的生命周期直至瀏覽器卸載頁(yè)面才會(huì)結(jié)束,也就是說(shuō)全局變量不會(huì)被當(dāng)成垃圾回收。
垃圾收集策略 (標(biāo)記清除)
工作原理:
當(dāng)變量進(jìn)入環(huán)境時(shí)(例如在函數(shù)中聲明一個(gè)變量),將這個(gè)變量標(biāo)記為“進(jìn)入環(huán)境”,當(dāng)變量離開(kāi)環(huán)境時(shí),則將其標(biāo)記為“離開(kāi)環(huán)境”。標(biāo)記“離開(kāi)環(huán)境”的就回收內(nèi)存。
工作流程:
1- 當(dāng)變量進(jìn)入環(huán)境時(shí),垃圾收集器會(huì)在運(yùn)行的時(shí)候會(huì)給存儲(chǔ)在內(nèi)存中的所有變量都加上標(biāo)記。
2- 當(dāng)變量離開(kāi)環(huán)境時(shí),垃圾收集器會(huì)去掉環(huán)境中的變量以及被環(huán)境中的變量引用的變量的標(biāo)記。
3- 最后垃圾收集器會(huì)執(zhí)行最后一步內(nèi)存清除的工作,銷毀那些帶標(biāo)記的值并回收它們所占用的內(nèi)存空間。
如何避免內(nèi)存泄漏:
1- 減少不必要的全局變量,使用嚴(yán)格模式避免意外創(chuàng)建全局變量。
2- 在你使用完數(shù)據(jù)后,及時(shí)解除引用(閉包中的變量,dom引用,定時(shí)器清除)。
3- 組織好你的邏輯,避免死循環(huán)等造成瀏覽器卡頓,崩潰的問(wèn)題。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的JavaScript垃圾回收机制理解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: react子组件向父组件传递数据实例
- 下一篇: 班得瑞十大最佳歌曲(班得瑞轻音乐在线收听