javascript記憶體回收淺析

來源:互聯網
上載者:User

1引用計數記憶體回收

核心:追蹤記錄對象被引用的次數。思路是如果一個對象A被賦值給了一個變數v,則該對象A的引用計數值加1,如果變數v又被賦予其他值了,比如a="str",則該對象A的引用計數值減1.當這個引用計數值變成0時,就表明它所佔的記憶體空間可以被回收了。

1 var  A={b:4};

2 var v=A;//此時A的引用計數值為1

3 var vv=A; //此時A的引用計數值為2

4 v=9;//A的引用計數值為1

5 vv="hah";//A的引用計數值為0,當垃圾收集器下次運行時,A就被回收

如果出現了循環參考:

1 var  A={b:4,c:null};

2 var   B={a:4,c:null};

3

4 A.c=B; //B的引用計數值為1

5 B.c=A;//A的引用計數值為1,此時他們互相引用,就不會被回收

2標記清除

核心:當變數進入執行環境時,標記為“進入環境”,但變數離開環境時,標記為“離開環境“。當垃圾收集器遇到標記為”離開環境“的變數時,就將它們所佔的記憶體空間回收。

1 function  A(){

2     var  a=12; //進入函數A時,預解析將a先申明,並被標記為”進入環境“

3 }

4 //執行完函數A後, a被標記為”離開環境“

查看本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/webkf/script/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.