JVM 调优参数

5 阅读3分钟

JVM 常用调优参数(2024-2025 最新推荐)

JVM 调优主要围绕内存分配垃圾回收器GC 行为线程诊断等方面。以下是目前(JDK 8 ~ JDK 21+)最常用、最推荐的调优参数。

1. 堆内存相关(最核心、最常用)

参数作用说明推荐写法示例说明
-Xms初始堆大小(Initial Heap Size)-Xms4g建议与 -Xmx 设为相同值,避免频繁扩容
-Xmx最大堆大小(Maximum Heap Size)-Xmx4g生产环境通常设为容器内存的 70-80%
-Xmn / -XX:NewSize / -XX:MaxNewSize年轻代大小(Eden + Survivor)-Xmn1g-XX:NewRatio=2G1 通常不建议手动设,Parallel/CMS 可设
-XX:MaxMetaspaceSize元空间最大值(JDK8+,取代了 PermSize)-XX:MaxMetaspaceSize=512m默认无上限,建议设置上限防止 OOM
-XX:MetaspaceSize元空间初始触发 GC 大小-XX:MetaspaceSize=128m一般设为 MaxMetaspaceSize 的 1/4~1/2

推荐原则:容器化部署(Docker/K8s)时,优先使用百分比

-XX:MaxRAMPercentage=75.0
-XX:InitialRAMPercentage=75.0

2. 垃圾回收器选择(最重要决定)

参数推荐场景示例
-XX:+UseG1GCJDK8+ 默认推荐(JDK9+ 已经是默认),适合大堆(>6GB)、低延迟需求-XX:+UseG1GC
-XX:+UseZGCJDK11+,超低延迟(<10ms),大内存(>8GB)场景,JDK17+ 生产推荐-XX:+UseZGC -XX:ZAllocationSpikeTolerance=2
-XX:+UseShenandoahGC类似 ZGC,低暂停,OpenJDK 主流发行版支持良好-XX:+UseShenandoahGC
-XX:+UseParallelGC吞吐量优先,小堆(<6GB),批处理任务-XX:+UseParallelGC
-XX:+UseConcMarkSweepGCJDK9+ 已废弃,不推荐新项目使用

2024-2025 推荐组合

  • 大多数新项目-XX:+UseG1GC
  • 追求极致低延迟(<10ms 暂停):-XX:+UseZGC(JDK17+ 推荐)
  • 老项目兼容-XX:+UseG1GC

3. G1GC 常用调优参数(最常用垃圾回收器)

参数作用说明推荐值 / 示例
-XX:MaxGCPauseMillis期望最大 GC 暂停时间(软目标)200(默认200ms)
-XX:G1HeapRegionSizeG1 区域大小(必须是 2 的幂)8m ~ 32m(大堆建议 16m/32m)
-XX:InitiatingHeapOccupancyPercent老年代占用多少时触发并发 GC(IHOP)45(默认45%,可调低到35-40)
-XX:G1ReservePercent预留给突发的空间百分比15 ~ 25(默认10)
-XX:ConcGCThreads并发 GC 线程数CPU核数/4 ~ CPU核数/2
-XX:ParallelGCThreads并行 GC 线程数(Young GC 和 Full GC)CPU核数(默认根据核数自动)

4. 其他高频调优参数

参数作用说明推荐写法
-XX:+AlwaysPreTouch启动时就把内存全部摸一遍(配合大页使用效果好)推荐开启
-XX:+UseStringDeduplication字符串去重(JDK8u20+)推荐开启(节省字符串内存)
-XX:+DisableExplicitGC禁用代码中的 System.gc()强烈推荐开启
-XX:+HeapDumpOnOutOfMemoryErrorOOM 时自动 dump 堆快照必须开启
-XX:HeapDumpPath指定 dump 文件路径/data/dump/heapdump.hprof
-XX:+PrintGCDetails打印详细 GC 日志(JDK9+ 推荐用 -Xlog:gc*调试时开启
-Xlog:gc*:file=gc.log:time,level,tagsJDK9+ 推荐的 GC 日志格式生产环境推荐
-XX:+UseLargePages使用大页内存(需 OS 支持)高性能场景可开启
-XX:SurvivorRatioEden : Survivor 比例默认 8(Eden 占 80%)
-XX:MaxTenuringThreshold对象晋升老年代前在 Survivor 区存活次数默认 15,可调到 6-10

5. 2024-2025 推荐启动参数模板(G1GC)

中小型应用(4-8GB 堆)

-server
-Xms4g
-Xmx4g
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-XX:G1HeapRegionSize=8m
-XX:InitiatingHeapOccupancyPercent=45
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/data/dump/
-XX:+PrintGCDetails
-Xlog:gc*:file=/data/log/gc.log:time,level,tags

大型低延迟应用(16GB+ 堆,推荐 ZGC)

-server
-Xms16g
-Xmx16g
-XX:+UseZGC
-XX:ConcGCThreads=6          # 根据 CPU 核数调整
-XX:ParallelGCThreads=12
-XX:+AlwaysPreTouch
-XX:+HeapDumpOnOutOfMemoryError
-Xlog:gc*:file=/data/log/gc.log

6. 调优建议顺序(推荐流程)

  1. 先把堆大小设对(-Xms = -Xmx
  2. 选择合适的 GC(G1 → ZGC/Shenandoah)
  3. 观察 GC 日志 + 监控(GC 次数、暂停时间、堆使用率)
  4. 微调 G1 参数(MaxGCPauseMillis、IHOP、ReservePercent)
  5. 最后考虑字符串去重、大页、NUMA 等高级选项