首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

JVM CMS 收集器深度解析:低停頓併發標記清除的權衡與調優

     編輯:Java 綜合教學

核心定位

目標:最短回收停頓,適合響應時間敏感型應用

算法:標記-清除

適用區:老年代

四階段流程

階段名稱線程狀態耗時特徵
1初始標記STW極短(僅標記 GC Roots 直達對象)
2併發標記併發長(GC Roots Tracing,與用戶線程並行)
3重新標記STW短(修正併發階段變動的標記)
4併發清除併發長(清理無用對象,與用戶線程並行)

三大缺點與應對

1. CPU 佔用高,降低吞吐量

  • 併發階段佔用 CPU,擠佔用戶線程資源
  • 默認啟動 (CPU + 3) / 4 條收集線程
  • 調優:-XX:ParallelGCThreads 限制線程數

2. 浮動垃圾無法當次清理

  • 併發清理階段用戶線程新產生的垃圾
  • 預留內存空間:-XX:CMSInitiatingOccupancyFraction(默認 92%,JDK 6 後可調)
  • 觸發條件:老年代使用率達閾值

3. 空間碎片導致大對象分配失敗

  • 標記-清除不壓縮,產生大量離散空閒塊
  • -XX:+UseCMSCompactAtFullCollection(默認開啟):Full GC 時壓縮
  • -XX:CMSFullGCsBeforeCompaction=N:每 N 次 CMS 觸發一次壓縮

調優建議

  • 大內存機器(>4G)優先考慮 G1/ZGC
  • 小內存、響應敏感應用可用 CMS
  • 監控 CMSInitiatingOccupancyFraction 避免 Promotion Failed
  • 定期觸發 Full GC 壓縮碎片
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved