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

wyh奔跑發表於2020-07-03

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

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

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

 

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

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

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

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

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

相關文章