Java虛擬機-03 對象回收標記

對象回收標記方法

  • 引用計數:為每一個引用的對象計數,計數為0則表示可以回收。缺陷:可能形成孤島,兩個對象相互引用,但是整個應用程序中沒有引用這兩個對象,造成內存洩漏
  • 根(GC Roots)搜索法:為對象到GC Roots根節點計數,為0則表示可以回收,大多數jvm都是通過該方法實現

可作為GC Roots的對象

  1. 棧中引用的對象
  2. 類靜態屬性引用的對象
  3. 常量引用的對象
  4. native方法引用的對象

引用分類

  1. 強引用String Reference:只要引用存在,永不回收
  2. 軟引用Soft Reference:OOM之前,可強行回收
  3. 弱引用Weak Reference:最近的一次GC一定回收
  4. 虛引用Phantom Reference:作用,對象回收可以收到通知

finalize方法

對象回收之前執行finalize方法,可以避免被回收,只會被系統調用一次

建議不要使用,原因:運行代價高,不確定性大,無法保證對象調用順序

方法區回收

回收對象

  • 廢棄常量
  • 無用類

無用類必須滿足3個條件

  1. 類實例都被回收了
  2. 類對應的ClassLoader被回收了
  3. 類對應的java.lang.Class對象無引用,且沒有任何地方能通過反射調用該類


分享到:


相關文章: