對象回收標記方法
- 引用計數:為每一個引用的對象計數,計數為0則表示可以回收。缺陷:可能形成孤島,兩個對象相互引用,但是整個應用程序中沒有引用這兩個對象,造成內存洩漏
- 根(GC Roots)搜索法:為對象到GC Roots根節點計數,為0則表示可以回收,大多數jvm都是通過該方法實現
可作為GC Roots的對象
- 棧中引用的對象
- 類靜態屬性引用的對象
- 常量引用的對象
- native方法引用的對象
引用分類
- 強引用String Reference:只要引用存在,永不回收
- 軟引用Soft Reference:OOM之前,可強行回收
- 弱引用Weak Reference:最近的一次GC一定回收
- 虛引用Phantom Reference:作用,對象回收可以收到通知
finalize方法
對象回收之前執行finalize方法,可以避免被回收,只會被系統調用一次
建議不要使用,原因:運行代價高,不確定性大,無法保證對象調用順序
方法區回收
回收對象
- 廢棄常量
- 無用類
無用類必須滿足3個條件
- 類實例都被回收了
- 類對應的ClassLoader被回收了
- 類對應的java.lang.Class對象無引用,且沒有任何地方能通過反射調用該類
閱讀更多 IT學習分享 的文章