JAVA常见的 JVM 参数及其典型默认值

发布于:2025-04-02 ⋅ 阅读:(42) ⋅ 点赞:(0)

在 Java 线上应用中,JVM 参数的默认值取决于具体的 JVM 实现(如 Oracle JDK、OpenJDK、Zulu 等)、版本(如 Java 8、11、17 等)以及运行环境(物理机、容器等)。以下是常见的 JVM 参数及其典型默认值(以 OpenJDK 8/11 为例):


1. 堆内存相关参数

参数 默认值 说明
-Xms 物理内存的 1/64 初始堆大小(最小堆内存)
-Xmx 物理内存的 1/4 最大堆内存
-XX:NewRatio 2 新生代与老年代的比例(1:2
-XX:SurvivorRatio 8 Eden 区与单个 Survivor 区的比例(8:1:1
-XX:MaxTenuringThreshold 15 对象晋升老年代的年龄阈值(CMS 下可能为 6
-XX:InitialSurvivorRatio 8 初始 Survivor 区比例

2. 垃圾回收器(GC)相关参数

不同版本的默认 GC 不同:

  • Java 8: 默认 Parallel GC (-XX:+UseParallelGC)

  • Java 9+: 默认 G1 GC (-XX:+UseG1GC)

常见 GC 参数:

参数 默认值 说明
-XX:+UseSerialGC 关闭 使用 Serial GC(单线程)
-XX:+UseParallelGC Java 8 默认开启 并行 GC
-XX:+UseConcMarkSweepGC 关闭 CMS GC(Java 14 已废弃)
-XX:+UseG1GC Java 9+ 默认开启 G1 GC
-XX:MaxGCPauseMillis 200 ms(G1) 目标最大 GC 暂停时间
-XX:G1HeapRegionSize 根据堆大小自动计算 G1 的 Region 大小

3. 元空间(Metaspace)参数

Java 8 移除了永久代(PermGen),改用元空间:

参数 默认值 说明
-XX:MetaspaceSize 20.8 MB(平台相关) 初始元空间大小
-XX:MaxMetaspaceSize 无限制(受物理内存限制) 最大元空间大小
-XX:CompressedClassSpaceSize 1 GB(64 位 JVM) 压缩类指针空间大小

4. 性能优化参数

参数 默认值 说明
-XX:+UseCompressedOops 开启(64 位 JVM) 压缩对象指针
-XX:CICompilerCount 根据 CPU 核数 JIT 编译器线程数
-XX:ParallelGCThreads CPU 核数 并行 GC 线程数
-XX:ConcGCThreads ≈ ParallelGCThreads / 4 并发 GC 线程数(如 G1)

5. 其他重要参数

参数 默认值 说明
-XX:+HeapDumpOnOutOfMemoryError 关闭 OOM 时生成堆转储文件
-XX:HeapDumpPath ./java_pid<pid>.hprof 堆转储文件路径
-XX:+PrintGCDetails 关闭 打印详细 GC 日志
-Xloggc:<file> 关闭 将 GC 日志输出到文件
-XX:+DisableExplicitGC 关闭 禁止显式调用 System.gc()

查看默认值的方法

  1. 打印所有 JVM 参数默认值

    java -XX:+PrintFlagsFinal -version

    输出中 := 表示修改后的值,= 表示默认值。

  2. 容器环境注意事项
    JVM 默认根据物理机内存计算堆大小(而非容器限制),需显式设置 -Xmx 或使用 -XX:+UseContainerSupport(Java 8u191+ 支持)。


线上建议配置示例(Java 8 为例)

# 基础配置
-Xms4g -Xmx4g             # 堆内存固定,避免动态调整
-XX:MetaspaceSize=256m    # 避免元空间动态扩容
-XX:+UseG1GC              # 使用 G1 GC(低延迟场景)
-XX:MaxGCPauseMillis=200  # 目标暂停时间

# 故障排查
-XX:+HeapDumpOnOutOfMemoryError 
-XX:HeapDumpPath=/path/to/dumps
-XX:ErrorFile=/path/to/hs_err_pid%p.log

# GC 日志
-Xloggc:/path/to/gc.log 
-XX:+PrintGCDetails 
-XX:+PrintGCDateStamps

注意事项

  1. 版本差异:不同 JDK 版本的默认值和推荐参数可能不同。

  2. 容器化部署:需结合 -XX:+UseContainerSupport 和 -XX:MaxRAMPercentage 等参数适配容器内存限制。

  3. 监控与调优:根据实际应用负载和监控数据(如 GC 暂停时间、吞吐量、内存使用率)调整参数。

建议通过工具(如 VisualVM、Grafana + Prometheus)持续监控 JVM 状态,结合压力测试验证配置合理性。


网站公告

今日签到

点亮在社区的每一天
去签到