欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談JavaScript的自動(dòng)垃圾收集機(jī)制

 更新時(shí)間:2016年12月15日 16:40:31   作者:林泠  
本文主要對(duì)JavaScript的自動(dòng)垃圾收集機(jī)制進(jìn)行簡(jiǎn)要分析,并介紹了垃圾收集的方式:標(biāo)記清除(mark-and-sweep)和引用計(jì)數(shù)(reference counting),需要的朋友一起來(lái)看下吧

執(zhí)行環(huán)境會(huì)負(fù)責(zé)管理代碼執(zhí)行過(guò)程中使用的內(nèi)存,編寫(xiě)JavaScript程序時(shí),所需內(nèi)存的分配以及無(wú)用內(nèi)存的回收完全實(shí)現(xiàn)自動(dòng)管理。

原理:

找出那些不再繼續(xù)使用的變量,然后釋放其占用的內(nèi)存。為此,垃圾收集器會(huì)按照固定的時(shí)間間隔(或代碼執(zhí)行中預(yù)定的收集時(shí)間)周期性地執(zhí)行這一操作。

垃圾收集的方式:

1.標(biāo)記清除(mark-and-sweep)

  最常用的垃圾收集方式。當(dāng)變量進(jìn)入環(huán)境時(shí),就將變量標(biāo)記為“進(jìn)入環(huán)境”。從邏輯上講,永遠(yuǎn)不能釋放進(jìn)入環(huán)境的變量所占用的內(nèi)存,因?yàn)橹灰獔?zhí)行流進(jìn)入相應(yīng)的環(huán)境,就可能會(huì)用到它們。當(dāng)變量離開(kāi)環(huán)境時(shí),則將其標(biāo)記為“離開(kāi)環(huán)境”。

  立即收集器在運(yùn)行時(shí)會(huì)給存儲(chǔ)在內(nèi)存中的所有變量都加上標(biāo)記,然后它會(huì)去掉環(huán)境中的變量以及被環(huán)境中的變量引用的變量的標(biāo)記。剩下的在被加上標(biāo)記的變量將被視為準(zhǔn)備刪除的變量,原因是環(huán)境中的變量已經(jīng)無(wú)法訪(fǎng)問(wèn)到這些變量。最后,垃圾收集器完成內(nèi)存清除,銷(xiāo)毀那些帶有標(biāo)記的值并收回它們所占用的內(nèi)存空間。

2.引用計(jì)數(shù)(reference counting)

  跟蹤記錄每個(gè)值被引用的次數(shù),當(dāng)這個(gè)值的引用次數(shù)為0時(shí),說(shuō)明沒(méi)有辦法再訪(fǎng)問(wèn)這個(gè)值了,因而就可以將其占用的內(nèi)存空間回收回來(lái)。當(dāng)垃圾收集器下次再運(yùn)行時(shí),會(huì)釋放那些引用次數(shù)為零的值所占用的內(nèi)存。

(1)應(yīng)用機(jī)制存在一個(gè)問(wèn)題:循環(huán)引用。

  循環(huán)引用是指對(duì)象A中包含一個(gè)指向?qū)ο驜的指針,而對(duì)象B中也包含一個(gè)指向?qū)ο驛的引用。(這樣它們的引用可能永遠(yuǎn)不為0,如果函數(shù)被重復(fù)多次調(diào)用,就會(huì)導(dǎo)致大量的內(nèi)存得不到回收。)

(2)IE中的BOM和DOM中的對(duì)象使用C++以COM(component Object Model,組件對(duì)象模型)對(duì)象的形式實(shí)現(xiàn),而COM對(duì)象的垃圾收集機(jī)制采用的是引用計(jì)數(shù)策略。

以下是COM對(duì)象導(dǎo)致的循環(huán)引用的問(wèn)題:

eg:

var element=document.getElementById("some_element");
 var myObject=new Object();
 myObject.element=element;
 element.someObject=myObject;

上面的例子在一個(gè)DOM元素(element)和一個(gè)原生JavaScript對(duì)象(myObject)之間創(chuàng)建了循環(huán)引用。由于存在這個(gè)循環(huán)引用,即使將例子中的DOM從頁(yè)面移除,它也永遠(yuǎn)不會(huì)被回收。

可以使用以下代碼手工斷開(kāi)原生JavaScript和DOM元素之間的鏈接:

myObject.element=null;
element.someObject=null;

以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持腳本之家!

相關(guān)文章

  • 詳解javascript中的Strict模式

    詳解javascript中的Strict模式

    我們都知道javascript是一個(gè)弱類(lèi)型語(yǔ)言,在ES5之前,javascript的程序編寫(xiě)具有很強(qiáng)的隨意性,我可以稱(chēng)之為懶散模式(sloppy mode)。比如可以使用未定義的變量,可以給對(duì)象中的任意屬性賦值并不會(huì)拋出異常等等。本文將詳細(xì)介紹javascript中的Strict模式。
    2021-06-06
  • JavaScript獲取對(duì)象鍵名的五種方法

    JavaScript獲取對(duì)象鍵名的五種方法

    在 JavaScript 中,操作對(duì)象時(shí)獲取鍵名是高頻需求,不同場(chǎng)景下,我們需要篩選「自身/繼承屬性」「可枚舉/不可枚舉鍵」「字符串/Symbol 鍵」,本文將全面梳理 5 種核心方法的差異與適用場(chǎng)景,助你精準(zhǔn)選擇,需要的朋友可以參考下
    2025-04-04
  • JS數(shù)組方法shift()、unshift()用法實(shí)例分析

    JS數(shù)組方法shift()、unshift()用法實(shí)例分析

    這篇文章主要介紹了JS數(shù)組方法shift()、unshift()用法,結(jié)合實(shí)例形式分析了JavaScript數(shù)組shift()與unshift()方法功能、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2020-01-01
  • 使用classList來(lái)實(shí)現(xiàn)兩個(gè)按鈕樣式的切換方法

    使用classList來(lái)實(shí)現(xiàn)兩個(gè)按鈕樣式的切換方法

    下面小編就為大家分享一篇使用classList來(lái)實(shí)現(xiàn)兩個(gè)按鈕樣式的切換方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • 使用Microsoft Ajax Minifier減小JavaScript文件大小的方法

    使用Microsoft Ajax Minifier減小JavaScript文件大小的方法

    大家用來(lái)減小JavaScript文件下載大小的常見(jiàn)的方式有2種: 壓縮(compression)和縮?。╩inification)。
    2010-04-04
  • JavaScript實(shí)現(xiàn)扯網(wǎng)動(dòng)畫(huà)效果的示例代碼

    JavaScript實(shí)現(xiàn)扯網(wǎng)動(dòng)畫(huà)效果的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用JavaScript語(yǔ)言實(shí)現(xiàn)扯網(wǎng)動(dòng)畫(huà)效果,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)JS有一定的幫助,需要的可以參考一下
    2022-06-06
  • JS實(shí)現(xiàn)簡(jiǎn)單打字測(cè)試

    JS實(shí)現(xiàn)簡(jiǎn)單打字測(cè)試

    這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)簡(jiǎn)單打字測(cè)試,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • JavaScript私有變量實(shí)例詳解

    JavaScript私有變量實(shí)例詳解

    這篇文章主要介紹了JavaScript私有變量,結(jié)合實(shí)例形式分析了javascript私有變量的常見(jiàn)定義及訪(fǎng)問(wèn)方法,需要的朋友可以參考下
    2019-01-01
  • 詳解tween.js 中文使用指南

    詳解tween.js 中文使用指南

    本篇文章主要介紹了詳解tween.js 中文使用指南,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • Web打印解決方案之普通報(bào)表打印功能

    Web打印解決方案之普通報(bào)表打印功能

    這篇文章主要介紹了Web打印解決方案之普通報(bào)表打印功能的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-08-08

最新評(píng)論