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

JVM 垃圾收集器參數全解析:內存區域、並行並發與調優實戰

     編輯:Java 相關知識

垃圾收集器選擇參數

參數收集器組合適用場景
-XX:+UseSerialGCSerial + Serial OldClient 模式默認,單線程,小應用
-XX:+UseParNewGCParNew + Serial Old多核開發/測試,不推薦生產
-XX:+UseConcMarkSweepGCParNew + CMS (Serial Old 備用)低延遲要求,Web 應用
-XX:+UseParallelGCParallel Scavenge + Parallel OldServer 模式默認,高吞吐量
-XX:+UseParallelOldGC並行年老代JDK 1.5+ 已無效,默認開啟

JVM 內存區域大小參數

參數含義默認值
-Xms堆初始大小物理內存 1/64 (<1G)
-Xmx堆最大大小物理內存 1/4 (<1G)
-Xmn新生代大小-
-Xss線程棧大小平台相關 (通常 1M)
-XX:PermSize永久代初始大小物理內存 1/64
-XX:MaxPermSize永久代最大大小物理內存 1/4
-XX:NewRatio新生代:年老代比例2 (即 1:2,新生代佔 1/3)
-XX:SurvivorRatioEden:Survivor 比例8 (Eden 80%, 兩個 Survivor 各 10%)

注意:JDK 8+ 移除永久代,改為 Metaspace,參數改為 -XX:MetaspaceSize 和 -XX:MaxMetaspaceSize。

通用 GC 性能參數

參數含義建議值
-XX:PretenureSizeThreshold大對象直接進年老代閾值0 (不限制),大對象可設 10M
-XX:MaxTenuringThreshold晉升年老代最大年齡15 (默認),可調 5-10
-XX:+DisableExplicitGC禁用 System.gc()建議開啟,防止誤調用

並行收集器專用參數

參數含義調優策略
-XX:ParallelGCThreadsGC 線程數默認 = CPU 核心數,可適當減少
-XX:GCTimeRatio吞吐量目標 (1/(1+N))99 表示 1% GC 時間,若不達標縮小新生代
-XX:MaxGCPauseMillis最大停頓時間目標優先滿足停頓,犧牲吞吐量和新生代大小
-XX:+UseAdaptiveSizePolicy自適應調節策略開啟後自動調整新生代、Survivor、晉升年齡

CMS 並發收集器專用參數

參數含義建議值
-XX:CMSInitiatingOccupancyFraction觸發 CMS 回收的堆佔用比例60-75,視應用分配速率調整
-XX:+UseCMSCompactAtFullCollectionFull GC 後進行內存整理開啟,減少碎片
-XX:CMSFullGCsBeforeCompaction多少次 Full GC 後整理一次0 表示每次,可設 5-10 平衡停頓
-XX:+CMSParallelRemarkEnabled並行 Remark 階段開啟,縮短停頓
-XX:+CMSScavengeBeforeRemarkRemark 前先 Young GC開啟,減少 Remark 掃描對象

關鍵參數組合實戰模板

高吞吐量批處理應用


-server
-Xms4g -Xmx4g -Xmn3g
-XX:+UseParallelGC
-XX:ParallelGCThreads=8
-XX:GCTimeRatio=99
-XX:+UseAdaptiveSizePolicy
-XX:+DisableExplicitGC

低延遲 Web 應用


-server
-Xms4g -Xmx4g -Xmn1.5g
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=70
-XX:+UseCMSCompactAtFullCollection
-XX:CMSFullGCsBeforeCompaction=5
-XX:+CMSParallelRemarkEnabled
-XX:+CMSScavengeBeforeRemark
-XX:+DisableExplicitGC

大內存低延遲 (G1/JDK 9+)


-server
-Xms8g -Xmx8g
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-XX:G1HeapRegionSize=16m
-XX:+DisableExplicitGC

調優核心思路

  1. 確定目標:吞吐量優先 → Parallel GC;延遲優先 → CMS/G1/ZGC
  2. 設置基線:固定 -Xms=-Xmx 避免震蕩,預設新生代
  3. 觀察指標:GC 頻率、耗時、停頓分佈、吞吐量、內存佔用
  4. 單參數調整:每次調整一個關鍵參數,對比效果
  5. 壓測驗證:模擬生產負載,長時間運行觀察穩定性

常用監控工具

  • jstat -gcutil:實時 GC 統計
  • jmap -heap:堆結構詳情
  • VisualVM / JConsole:圖形化監控
  • GC 日誌:-Xlog:gc*:file=gc.log:time,uptime,level,tags (JDK 9+)
  • Arthas / Greys:線上診斷

總結

JVM GC 參數眾多但核心邏輯清晰:選擇收集器 → 確定內存區域大小 → 設置性能目標 → 微調細節參數。沒有萬能配置,只有適合具體業務負載的配置。系統性調優需結合監控數據、壓測驗證、業務特點綜合判斷。

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