多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > web前端 > jscript > 關于的JavaScript垃圾回收機制

關于的JavaScript垃圾回收機制

來源:程序員人生   發布時間:2013-11-06 00:11:17 閱讀次數:4145次

JavaScript具有自動垃圾回收機制,執行環境會負責管理代碼執行過程中使用的內存。

垃圾收集器必須跟蹤哪個變量有用,對于不再有用的變量打上標記,以備將來收回其占用的內存。用于標識無用變量的策略因實現而異,但具體到瀏覽器中的實現,通常有兩個策略。

1、標記清除

JavaScript中最常用的垃圾收集方式是標記清除(mark-and-sweep)。當變量進入環境時,就將這個變量標記為“進入環境”。從邏輯上講,永遠不能釋放進入環境的變量所占用的內存,因為只要執行流進入相應的環境,就可能會用到它們。而當變量離開環境時,則將其標記為“離開環境”。

垃圾收集器在運行的時候會給存儲在內存中的所有變量都加上標記(當然,可以使用任何標記方式)。然后,它會去掉環境中的變量以及被環境中的變量引用的變量的標記。而在此之后再被加上標記的變量將被視為準備刪除的變量,原因是環境中的變量已經無法訪問到這些變量了。最后,垃圾收集器完成內存清除工作,銷毀那些帶標記的值并回收他們所占用的內存空間。

2、引用計數
另一種不太常用的垃圾收集策略叫做引用計數(reference counting)。引用計數的含義是跟蹤記錄每個值被引用的次數。當聲明了一個變量并將一個引用類型值賦給該變量時,則這個值的引用次數就是1.如果同一個值又被賦給另一個變量,則該值的引用次數加1。,相反,如果包含對這個引用的變量取得了另外一個值,則這個值的引用次數減1.當這個值的引用次數變成0時,則說明沒有辦法再訪問這個值了,因而就可以將其占用的內存空間收回來。這樣當垃圾回收器下次再運行時,它就會釋放那些引用次數為零的值所占用的內存。

循環引用:對象A中包含一個指向對象B的指針,而對象B中也包含一個指向對象A的引用。如下:

function problem() {
var objectA = new Object();
var objectB = new Object();

objectA.someOtherObject
= objectB;
objectB.anotherObject
= objectA;
}

 在這個例子中,objectA 和 objectB 通過各自的屬性相互引用。也就是說,這兩個對象的引用次數都是2.在采用標記清除策略的實現中,由于函數執行后,這兩個對象都離開了作用域,因此這種相互引用不是個問題。但在采用引用計數策略的實現中,當函數執行完畢后,objectA 和 objectB 還將繼續存在,因此它們的引用次數永遠不會是 0。假如這個函數被重復多次引用,將會導致大量內存得不到回收。

另外,IE中有一部分對象并不是原生 JavaScript 對象。例如,其BOM和DOM中的對象就是使用C++以COM(Component Object Model,組件對象模型)對象的形式實現的。而COM對象的垃圾收集機制采用的引用計數策略。因此即使IE的JavaScript引擎是使用標記清除策略來實現的,但JavaScript訪問的COM對象依然是基于引用計數策略的。

也就是說,只要在IE中涉及COM對象,就會存在循環引用的問題。如下

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

 這個例子中,一個DOM元素與一個原生JavaScript對象之間創建了循環引用。其中,變量myObject有一個名為element的屬性指向element對象;反之亦然。由于存在這個循環引用,即使將例子中的DOM從頁面中移除,它也永遠不會被回收。

為了避免類似這樣的循環引用問題,最好是在不使用它們的時候手動斷開原生 JavaScript對象與DOM元素之間的連接。

myObject.element = null;
element.someObject
= null;
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 欧美jizz18欧美 | 精品麻豆| 国产成人一区二区三区小说 | 一区二区三区欧美 | 国内精品一区视频在线播放 | 久久大香| 欧美日韩一区二区三区视频播 | 欧美日本一区亚洲欧美一区 | 最近好中文字幕国语免费高清 | 欧美一区二区三区久久综合 | 亚洲欧美日韩色 | 久久久久伊人 | 国产福利亚洲 | 毛片999| 国产成人综合亚洲欧洲色就色 | 中文字幕精品视频 | 日韩欧美一区二区三区中文精品 | 久久久久国产免费 | 午夜免费啪视频观看网站 | 国内自拍成人网在线视频 | 成人国产在线不卡视频 | 最近的中文字幕 | 在线观看欧美精品 | 国产精品视频一区二区三区 | 亚洲一区精品中文字幕 | 亚州精品一区二区三区 | 最近中文字幕完整视频大全版 | 久久精品综合一区二区三区 | 日本在线观看中文字幕 | 中文字幕最新中文字幕中文字幕 | 精品一区二区三区在线观看 | 精品欧美一区二区三区精品久久 | 叼嘿在线观看 | 伊人情人综合网 | 欧美一级毛片免费看 | 欧洲精品一区二区 | 伊人55影院| 色cccwww在线播放 | 国产精品免费观看 | 欧乱色国产精品兔费视频 | 欧美伦理三级在线播放影院 |