CMS GC的英文名為:“Mostly Concurrent Mark and Sweep Garbage Collector” (最大-併發-標記-清除-垃圾收集器)。 作用範圍: 老年代 演算法: 併發標記清除演算法。 啟用參數:-XX:+UseConMarkSweepGC預設回收線程數:(處理器核 ...
CMS GC的英文名為:“Mostly Concurrent Mark and Sweep Garbage Collector” (最大-併發-標記-清除-垃圾收集器)。
作用範圍: 老年代
演算法: 併發標記清除演算法。
啟用參數:-XX:+UseConMarkSweepGC預設回收線程數:(處理器核心數量 + 3)/4
Java9之後使用CMS垃圾收集器後,預設年輕代就為ParNew收集器,並且不可更改,同時JDK9之後被標記為不推薦使用,JDK14就被刪除了。
設計目標/優點:避免在老年代垃圾收集時出現長時間的卡頓,主要通過兩種手段來達成此目標:
第一,不對老年代進行整理,而是使用空閑列表(free-list)來管理記憶體空間的回收
第二,在mark-and-sweep(標記-清除)階段的大部分工作和應用線程一起併發執行。
適用場景:
GC過程短暫,低延遲,適合對延遲要求較高的系統
如果伺服器是多核CPU,並且主要調優目標是降低GC停頓導致的系統延遲,那麼使用CMS是個很明智的選擇。通過減少每一次GC停頓的時間,很多時候會直接改善用戶體驗。因為多數情況下有部分CPU資源被垃圾回收器線程消耗,所以在CPU資源受限的情況下,CMS GC會比並行GC的吞吐量差一些(對於絕大部分系統,這個吞吐和延遲的差別應該都不明顯)
在實際情況中,進行老年代的併發回收時,可能會伴隨多次年輕代的minor GC。在這種情況下full GC的日誌中就會摻雜著多次minor GC事件
CMS GC的幾個大階段
1、初始標記(CMS initial mark)
2、併發標記(CMS concurrent mark)
3、重新標記(CMS remark)
4、併發清除(CMS concurrent sweep)
本文來自博客園,作者:瘦腿先生Stephen,轉載請註明原文鏈接:https://www.cnblogs.com/Stephen-leg/p/18056767