GC垃圾回收機制

GC垃圾回收機制就是對無用的對象進行回收從而釋放內存java

經過倆種算法去判斷是否須要去回收算法

  1. 引用計數法

        引用計數法很簡單,可是存在問題,於是java並不採用這種方式進行對象存活判斷。對象

        引用計數法的邏輯是:在堆中存儲對象時,在對象頭處會有一個計數器,若是一個對象增長了一個引用與之相連,則次數加一,若是一個引用關係失效則次數減一。若是一個對象的次數變爲0,則說明這個對象已經不適用,不處於存活狀態blog

        最大問題就是:內存

        若是一個對象A持有對象B,對象B也持有對象A,那麼gc永遠沒法回收這倆個對象變量

             

      2.可達性分析法垃圾回收

        這個算法的基本思路就是經過一系列名爲GC Roots的對象做爲起始點,從這些節點開始向下搜索,搜索所走過的路徑成爲引用鏈,當一個對象到GC Roots沒有任何引用鏈相連時,則證實此對象時不可用的搜索

        

        由圖可知,obj8,obj9,obj10都沒有到GCRoots對象的引用鏈,即使obj9和obj10之間有引用鏈,他們仍是會被當成垃圾處理,能夠進行回收引用

 

        通常來講,如下狀況的對象能夠做爲GC Roots:gc

  • 虛擬棧(棧楨中的本地變量表)中的引用對象
  • 方法區中的類靜態屬性引用的對象
  • 方法區中的常量引用的對象
  • 本地方法棧中JNI(Native方法)的引用的對象
相關文章
相關標籤/搜索