3、垃圾收集之判斷對象是否存活

1、引用計數算法

  1. 當有一個地方引用這個對象時,計數器加1
  2. 當引用失效時,計數器減1
  3. 當計數器爲0時,則對象死亡,等待回收

2、 可達性分析算法

  1. 若一個對象沒法經過引用連接到GC Roots時,則斷定該對象爲可回收對象(第一次標記)
  2. 目前java虛擬機採用的就是 可達性分析算法 判斷對象是否可回收
  3. 對於虛擬機斷定的可回收對象,還會再次進行標記是否有必要執行finalize()方法
    • 該類中沒有覆蓋finalize()方法,則沒有必要執行finalize()方法
    • 虛擬機已經調用過一次finalize()方法,則沒有必要執行finalize()方法
    • 除了上述兩種狀況,虛擬機都會爲對象執行finalize()方法
  4. 若虛擬機斷定對象可回收,則此時將對象放到F-Queue中等待執行finalize()方法
  5. 若在覆蓋的finalize()方法中,將可回收對象賦值給其餘變量,則這個對象在第二次標記時被移除出可回收集合

相關文章
相關標籤/搜索