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

JVM 調優總結(八):分代 GC 典型配置舉例與調優策略(下)

     編輯:Java 相關知識

常用 JVM 參數速查表

堆空間配置

-Xms          初始堆大小
-Xmx          最大堆大小
-XX:NewSize=     新生代初始大小
-XX:NewRatio=    新生代:老年代 比值(如 4 表示 1:4,新生代佔 1/5)
-XX:SurvivorRatio= Eden:Survivor 比值(如 8 表示 8:2,單個 Survivor 佔新生代 1/10)
-XX:MaxPermSize= 永久代大小(JDK 8-)
-XX:MaxMetaspaceSize= 元空間大小(JDK 8+)

收集器選擇

-XX:+UseSerialGC           串行收集器(單核/小堆)
-XX:+UseParallelGC         並行收集器(多核、吞吐優先)
-XX:+UseParallelOldGC      老年代並行收集(JDK 6+)
-XX:+UseConcMarkSweepGC    CMS 並發收集器(響應優先)
-XX:+UseG1GC               G1 收集器(大堆、平衡型)

GC 日志與統計

-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:           日志輸出文件(生產必開)

並行收集器調優

-XX:ParallelGCThreads=    GC 線程數(通常 = CPU 核心數)
-XX:MaxGCPauseMillis=    最大停頓目標(自動調整新生代大小)
-XX:GCTimeRatio=          GC 時間佔比 = 1/(1+n)(默認 99 → 1%)
-XX:+UseAdaptiveSizePolicy   自適應調整新生代/Survivor 比例(推薦開啟)

CMS 並發收集器調優

-XX:+CMSIncrementalMode      增量模式(單 CPU 適用)
-XX:ParallelGCThreads=    年輕代並行線程數
-XX:CMSInitiatingOccupancyFraction=  老年代佔用 % 觸發 CMS(默認 92%~68% 自適應)
-XX:+UseCMSCompactAtFullCollection     Full GC 時壓縮老年代(消除碎片)
-XX:CMSFullGCsBeforeCompaction=     多少次 Full GC 後壓縮一次

調優策略:響應優先 vs 吞吐優先

響應時間優先應用(Web、API、即時系統)

  • **新生代**:盡可能設大(接近最低響應時間限制),減少 Minor GC 頻率,降低物件晉升老年代。
  • **老年代**:使用 CMS/G1,大小需結合**併發會話率、會話持續時間**估算。過小 → 碎片/頻繁 GC/退化串行;過大 → 單次停頓長。需參考:CMS GC 日誌、永久代 GC 次數、傳統 GC 耗時、新/老年代 GC 時間比。
  • **碎片應對**:開啟 UseCMSCompactAtFullCollection,設置 CMSFullGCsBeforeCompaction。

吞吐量優先應用(批處理、科學計算、離線分析)

  • **新生代**:極大(可達 GB 級),配合並行收集器,利用多核並行 GC。
  • **老年代**:較小,僅存放長期存活對象。
    典型配置:-Xmx3800m -Xms3800m -Xmn2g -XX:+UseParallelGC -XX:ParallelGCThreads=20 -XX:+UseParallelOldGC

小堆碎片問題應對

CMS 標記-清除不壓縮 → 運行久產生碎片 → 分配大對象失敗 → 觸發串行 Full GC(停頓極長)。
解決:定期壓縮(上述參數)或改用 G1(天然複製整理)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved