【JVM相關】垃圾收集器

一、垃圾收集器種類(流行)

垃圾收集器種類

二、年輕代垃圾收集器

  • Serial 收集器(-XX:+UseSerialGC,複製算法)
    • 單線程收集,進行垃圾收集時,必須暫停所有工作線程
    • 簡單高效,JVM Client 模式下默認的年輕代收集器
  • ParNew 收集器(-XX:+UseParNewGc,複製算法)
    • 多線程收集,其餘行爲、特點和 Serial 收集器一樣
    • JVM Server 模式下首選的年輕代收集器
  • Parallel Scavenge 收集器(-XX:+UseParallelGC,複製算法)
    • 比起關注用戶線程停頓時間,更關注系統吞吐量
    • 多核下才有優勢,JVM Server 模式下默認的年輕代收集器

三、老年代垃圾收集器

  • Serial Old 收集器(-XX:+UseSerialOldGC,標記-整理算法)
    • 單線程收集,進行垃圾收集時,必須暫停所有工作線程
    • 簡單高效,JVM Client 模式下默認的老年代收集器
  • Parallel Old 收集器(-XX:+UseParallelOldGC,標記-整理算法)
    • 多線程,吞吐量優先
  • CMS 收集器(-XX:+UseConcMarkSweepGC,標記-清除算法)
    • 收集過程:
    1. 初始化標記:stop-the-world
    2. 併發標記:併發追溯標記,程序不會停頓
    3. 併發預清理:查找執行併發標記階段從年輕代晉升到老年代的對象
    4. 重新標記:暫停虛擬機,掃描 CMS 堆中剩餘的對象
    5. 併發清理:清理垃圾對象,程序不會停頓
    6. 併發重置:重置 CMS 收集器的數據結構

四、G1收集器

G1 收集器(-XX:+UseG1GC,複製、標記-整理算法),即用於年輕代又用於老年代的收集器。

  • 特點:
    • 並行併發
    • 分代收集
    • 空間整合
    • 可預測的停頓
  • 作用:
    • 將整個 Java heap 內存劃分成多個大小相等的 region
    • 年輕代和老年代不再物理隔離
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章