在 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() |
查看默认值的方法
打印所有 JVM 参数默认值:
java -XX:+PrintFlagsFinal -version
输出中
:=
表示修改后的值,=
表示默认值。容器环境注意事项:
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
注意事项
版本差异:不同 JDK 版本的默认值和推荐参数可能不同。
容器化部署:需结合
-XX:+UseContainerSupport
和-XX:MaxRAMPercentage
等参数适配容器内存限制。监控与调优:根据实际应用负载和监控数据(如 GC 暂停时间、吞吐量、内存使用率)调整参数。
建议通过工具(如 VisualVM、Grafana + Prometheus)持续监控 JVM 状态,结合压力测试验证配置合理性。