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

分爲兩種:spa

  • 標記清除
  • 引用計數

標記清除指針

當變量進入環境時,就將這個變量標記爲「進入環境」。當變量離開環境時,則將其標記爲「離開環境」。code

垃圾收集器在運行的時候會給存儲在內存中的全部變量都加上標記,而後,它會去掉環境中的變量以及被環境中的變量引用的變量的標記。而在此以後再被加上標記的變量將被視爲準備刪除的變量,緣由是環境中的變量已經沒法訪問到這些變量了。最後,垃圾收集器完成內存清除工做。銷燬那些帶標記的值並回收它們所佔用的內存空間。對象

引用計數blog

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

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

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

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

爲了不相似的問題,最好是在不使用它們的時候手工斷開之間的鏈接。如:function

objA.someObj = null;
objB.anotherObj = null;
相關文章
相關標籤/搜索