1. 程式人生 > >JavaScript基礎概念之----垃圾回收機制

JavaScript基礎概念之----垃圾回收機制

內存空間 工作 清除 UNC var span javascrip 去掉 似的

分為兩種:

  • 標記清除
  • 引用計數

標記清除

當變量進入環境時,就將這個變量標記為“進入環境”。當變量離開環境時,則將其標記為“離開環境”。

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

引用計數

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

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

function problem(){
    var objA = new Object();
    var objB = new Object();

    objA.someObj = objB;
    objB.anotherObj = objA;
}

為了避免類似的問題,最好是在不使用它們的時候手工斷開之間的連接。如:

objA.someObj = null;
objB.anotherObj = null;

JavaScript基礎概念之----垃圾回收機制