萬盛學電腦網

 萬盛學電腦網 >> 腳本專題 >> javascript >> javascript中的垃圾回收

javascript中的垃圾回收

   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被標記為”離開環境“

copyright © 萬盛學電腦網 all rights reserved