首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 垃圾回收機制核心知識點總結:回收觸發條件、finalize 方法、對象可達性與標記清除算法

     編輯:Java 相關知識

GC 行為保證與代碼實踐

  1. 定義:回收不再使用的對象內存,供新對象分配
  2. 不可用判準:無任何活躍程序部分引用 (不可達)
  3. 運行線程:低優先級,內存不足時可能觸發,無時間保證
  4. 不可強制:System.gc() 僅建議啟動,不保證執行
  5. 無回收保證:不可達對象可能永不被回收,finalize 可能永不執行,程序結束前內存可能不釋放 (依賴 OS)
  6. 無順序保證:回收順序與 finalize 調用順序均不確定
  7. 循環引用不阻礙回收:相互引用的孤立對象圖同樣可回收
  8. 手動置 null 輔助回收:obj = null 暗示 GC,但若對象附加監聽器 (AWT 組件常見) 需先移除監聽器
  9. finalize() 簽名:protected void finalize() throws Throwable,子類可擴大訪問權限、縮小異常列表
  10. finalize 單次調用:異常不阻礙後續回收 (由 GC 決定)
  11. 對象復活:finalize 中讓其他對象引用 this 可使不可達對象再次可達,但僅能發生一次 (finalize 只調用一次)
  12. 顯式調用 finalize 不觸發回收:僅執行方法體
  13. finalize 可重載:但只有原始簽名會被 GC 調用
  14. finalize 不自動鏈接:子類必須顯式調用 super.finalize() 作為最後動作,編譯器不強制
  15. System.runFinalization():運行待執行的 finalize
  16. 局部變量出作用域即可回收:方法退出時,局部引用消失,對象如無其他引用即可回收
  17. 標記-清除算法:遍歷所有引用標記可達對象,清除未標記對象
  18. 實踐建議:切勿依賴 finalize 釋放稀缺資源 (文件句柄、網絡連接等),無法預知調用時機

考試重點

  • GC 觸發條件不確定,System.gc() 僅建議
  • finalize 只運行一次,可復活對象但僅一次
  • 循環引用不阻礙 GC
  • 局部變量隨方法結束可回收
  • 標記-清除是基礎算法概念

理解 GC 的非確定性本質,編寫代碼時顯式管理關鍵資源 (try-with-resources、finally 關閉流),而非寄希望於 finalize。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved