首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 類卸載與對象回收順序澄清:先卸載類再回收對象,而非相反

     編輯:程式設計疑難解答

正確順序

  1. 類不再被使用(無實例、無類加載器引用、無反射引用)。
  2. 類加載器可被回收(若無其他類引用)。
  3. 類元數據(Method Area / Metaspace)被卸載。
  4. 關聯對象在 GC 時被回收(對象回收不依賴類卸載,但類卸載前提是無存活實例)。

關鍵點

  • 對象回收(Heap GC)與類卸載(Metaspace GC)是獨立但相關的過程。
  • System.gc() 不保證類卸載,需 -XX:+ClassUnloadingWithConcurrentMark 等參數。
  • 動態生成類(代理、JSP 編譯、Groovy)易導致 Metaspace OOM,需監控 MetaspaceUsed。

參考

深入理解 Java 類卸載機制

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