Java GC機制

JVM堆分爲算法

  • 新域:存儲全部新生成的對象(使用「中止-複製」算法進行清理)對象

    • 新生代內存分爲2部分,1部分 Eden區較大,1部分Survivor比較小,
      • 並被劃分爲兩個等量的部分。
  • 舊域:新域中的對象,
    • 通過了必定次數的GC循環後,
    • 被移入舊域(算法是標記-整理算法)
  • 永久域:存儲類和方法對象,
    • 從配置的角度看,這個域是獨立的,不包括在JVM堆內(方法區)。
    • 默認爲4M。
  • 方法區(永久域): 
    • 永久域的回收有兩種:
      • 常量池中的常量,無用的類信息,
      • 常量的回收很簡單,沒有引用了就能夠被回收。
      • 對於無用的類進行回收,必須保證3點:
        • 類的全部實例都已經被回收
        • 加載類的ClassLoader已經被回收
        • 類對象的Class對象沒有被引用(即沒有經過反射引用該類的地方)
    • 永久代的回收並非必須的,能夠經過參數來設置是否對類進行回收。

示例圖:blog

相關文章
相關標籤/搜索