JVM永久代

布瑋發表於2018-09-17

複習備用,感謝開源

永久代

永久代是用於存放靜態檔案,如Java類、方法等。
持久代對垃圾回收沒有顯著影響,但是有些應用可能動態生成或者呼叫一些class,
例如Hibernate 等,在這種時候需要設定一個比較大的持久代空間來存放這些執行過程中新增的類

永久代中一般包含:
    -1 類的方法(位元組碼...)
    -2 類名(Sring物件)
    -3 .class檔案讀到的常量資訊
    -4 class物件相關的物件列表和型別列表 (e.g., 方法物件的array).
    -5 JVM建立的內部物件
    -6 JIT編譯器優化用的資訊

永久代與方法區

永久帶是方法區的一種實現,其中儲存類别範本資訊,常量以及靜態變數。

永久代的回收機制

hotspot的方法區存放在永久代中,因此方法區被人們稱為永久代。永久代的垃圾回收主要包括型別的解除安裝和廢棄常量池的回收。當沒有物件引用一個常量的時候,該常量即可以被回收。而型別的解除安裝更加複雜。必須滿足一下三點,該型別的所有例項都被回收了,該型別的ClassLoader被回收了,該型別對應的java.lang.Class沒有在任何地方被引用,在任何地方都無法通過反射來例項化一個物件

相關文章