關於jvm的永久代會發生垃圾垃圾回收嗎?進來便知

有些人認爲方法區(如Hotspot虛擬機中的元空間或者永久代)是沒有垃圾回收行爲的,其實不然。

一般來說這個區域的回收效果比較令人難以滿意,尤其是類型的卸載(類的卸載),條件非常苛刻。但是這部分區域的回收有時又確實是有必要的。

方法區的垃圾回收主要回收兩部分內容:常量池中廢棄的常量和不在使用的類型(類)

 

Hotspot虛擬機堆常量池的回收策略是非常明確的,只要常量池中的常量沒有被任何地方引用,就可以回收

但是判斷一個類型是否屬於“不在被使用的類”的條件就非常苛刻了。需要同時滿足以下三個條件:

     1、該類的所有實例都已經被回收,也就是堆中不存在該類及其任何派生子類的實例。

     2、加載該類的類加載器已經被回收,這個條件通常是很難達到的。

     3、該類對應的java.lang.Class對象沒有在任何地方被引用,無法在任何地方通過反射訪問該類的方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章