CMS
介紹
用于對年老代的回收性置,目標是盡量減少應用的暫停時間,減少full gc發(fā)生的幾率,利用和應用程序線程并發(fā)的垃圾回收線程來標記清除年老代球拦。適用于響應時間大于吞吐量優(yōu)先應用
原理
初始標記(CMS-initial-mark) -> 并發(fā)標記(CMS-concurrent-mark) -> 重新標記(CMS-remark) -> 并發(fā)清除(CMS-concurrent-sweep) ->并發(fā)重設狀態(tài)等待下次CMS的觸發(fā)(CMS-concurrent-reset)秃诵,在1续搀、3階段暫停應用,整個時間小于200毫秒為優(yōu)菠净。young generation的回收采用的仍然是并行復制收集器禁舷,這個跟Paralle gc算法是一致的
參數(shù)
-XX:+UseConcMarkSweepGC啟用CMS
-XX:+UseParallelGC:選擇垃圾收集器為并行收集器彪杉。此配置僅對年輕代有效∏A可以同時并行多個垃圾收集線程派近,但此時用戶線程必須停止。后臺系統(tǒng)任務可以使用此 gc洁桌。
-XX:+UseParNewGC:設置年輕代為多線程收集渴丸。可與CMS收集同時使用另凌。在serial基礎上實現(xiàn)的多線程收集器谱轨。
-XX:ParallelCMSThreads=20 CMS線程回收數(shù)
-XX:ParallelGCThreads= N 年輕代線程回收數(shù),默認是(ncpus <= 8) ? ncpus : 3 + ((ncpus * 5) / 8)
-XX:+UseCMSCompactAtFullCollection CMS是不會整理堆碎片的吠谢,為了防止堆碎片引起full gc碟嘴,通過會開啟CMS階段進行合并碎片選項,開啟這個選項一定程度上會影響性能,配置適當?shù)腃MSFullGCsBeforeCompaction來調(diào)整性能
-XX:CMSFullGCsBeforeCompaction=1 每次full gc進行碎片的合并,以保證新生代的大對象能分配到老年代
-XX:+CMSParallelRemarkEnabled開啟并行remark,減少remark暫停時間
-XX:+CMSScavengeBeforeRemark強制remark之前開始一次minor gc囊卜,減少remark的暫停時間
-XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled?避免P區(qū)引起的full gc
-XX:CMSInitiatingOccupancyFraction=80年老代占比超過xx進行CMS收集,年老代增長較慢可調(diào)大該值娜扇,設置過高可能導致:Concurrent mode failed(由于CMS回收年老代的速度太慢,導致年老代在CMS完成前就被沾滿栅组,引發(fā)full gc)雀瓢。計算公式:(Xmn-S0)/Old<=Old(1-F)
-XX:MaxTenuringThreshold 年齡達到一定閾值被移入老年代