JVM 的参数主要用于配置内存、垃圾回收(GC)、性能优化、调试等功能。根据功能和用途的不同,JVM 参数可分为以下几类:
1. 标准参数(Standard Options)
以 - 开头,所有 JVM 实现都必须支持。
常见参数:
-version:显示 JVM 版本。-help:显示帮助信息。-D<property>=<value>:设置系统属性(如-Dfile.encoding=UTF-8)。-classpath或-cp:指定类路径(用于加载类和资源)。
2. 非标准参数(Non-Standard Options)
以 -X 开头,不同 JVM 实现可能不同(如 HotSpot、OpenJ9)。
常见参数:
- 内存配置:
-Xms<size>:初始堆大小(如-Xms512m)。-Xmx<size>:最大堆大小(如-Xmx4g)。-Xss<size>:线程栈大小(如-Xss1m)。-Xmn<size>:新生代大小(建议为堆的 1/3 到 1/4)。
- 调试/日志:
-Xloggc:<file>:输出 GC 日志到文件。-XshowSettings:all:显示所有 JVM 配置信息。
- 其他:
-Xmixed:混合模式执行(解释器 + JIT 编译,默认)。-Xint:仅解释模式(禁用 JIT 编译)。-Xcomp:强制 JIT 编译所有方法(性能差,仅测试用)。
3. 高级参数(Advanced Options)
以 -XX: 开头,用于调优和调试,不同 JVM 版本可能变动较大。
内存相关:
- 堆/方法区:
-XX:MetaspaceSize=<size>:元空间初始大小(JDK8+)。-XX:MaxMetaspaceSize=<size>:元空间最大大小(默认不限制)。-XX:NewRatio=<n>:老年代与新生代的比例(如-XX:NewRatio=2表示老年代是新生代的 2 倍)。-XX:SurvivorRatio=<n>:Eden 区与 Survivor 区的比例(如-XX:SurvivorRatio=8表示 Eden:Survivor=8:1)。
- 直接内存:
-XX:MaxDirectMemorySize=<size>:限制直接内存大小(默认与-Xmx一致)。
垃圾回收(GC)相关:
- GC 算法选择:
-XX:+UseSerialGC:串行 GC(单线程,适合小型应用)。-XX:+UseParallelGC:并行 GC(多线程,吞吐量优先)。-XX:+UseConcMarkSweepGC:CMS GC(低停顿,JDK9 前适用)。-XX:+UseG1GC:G1 GC(JDK9+ 默认,分区回收)。-XX:+UseZGC或-XX:+UseShenandoahGC:低延迟 GC(JDK11+)。
- GC 调优:
-XX:MaxGCPauseMillis=<ms>:目标最大 GC 停顿时间(如-XX:MaxGCPauseMillis=200)。-XX:GCTimeRatio=<n>:GC 时间与应用时间占比(如-XX:GCTimeRatio=19表示 GC 时间占 5%)。-XX:+ExplicitGCInvokesConcurrent:显式调用System.gc()时触发并发 GC(避免 Full GC 停顿)。
调试/诊断:
- 日志与分析:
-XX:+PrintGCDetails:打印详细 GC 日志。-XX:+HeapDumpOnOutOfMemoryError:内存溢出时生成堆转储文件。-XX:HeapDumpPath=<path>:指定堆转储文件路径。
- 内存泄漏检测:
-XX:+UseGCOverheadLimit:启用 GC 超时限制(检测内存泄漏)。-XX:OnOutOfMemoryError="<cmd>":内存溢出时执行自定义命令(如重启脚本)。
JIT 编译器优化:
-XX:+TieredCompilation:启用分层编译(JDK8+ 默认)。-XX:CompileThreshold=<n>:触发 JIT 编译的方法调用次数阈值。-XX:+PrintCompilation:打印 JIT 编译日志。
4. 实验性参数(Experimental Options)
以 -XX:+UnlockExperimentalVMOptions 开头,需谨慎使用(可能不稳定或变动)。
示例:
-XX:+UseNUMA:优化 NUMA 架构内存分配。-XX:+UseStringDeduplication:字符串去重(减少内存占用)。
常用参数组合示例
Web 服务基础配置:
java -Xms2g -Xmx2g -Xss1m -XX:MetaspaceSize=256m \
-XX:+UseG1GC -XX:MaxGCPauseMillis=200 \
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/logs/heapdump.hprof \
-jar app.jar
低延迟场景(ZGC):
java -Xms8g -Xmx8g -XX:+UseZGC -XX:+UnlockExperimentalVMOptions \
-XX:MaxGCPauseMillis=10 -XX:+PrintGCDetails \
-jar app.jar
查看所有参数
- 查看默认参数:
java -XX:+PrintFlagsFinal -version - 查看生效参数:
jinfo -flags <pid> # 查看运行中 JVM 的参数
注意事项
- 参数顺序:部分参数依赖其他参数(如启用 ZGC 需先解锁实验性选项)。
- 版本差异:不同 JDK 版本支持的参数可能不同(如 CMS 在 JDK14 后被移除)。
- 监控验证:调整参数后需通过工具(如
jstat、VisualVM)监控 GC、内存使用情况。
掌握这些参数可以帮助优化 JVM 性能、减少 GC 停顿,并快速排查内存泄漏等问题。

被折叠的 条评论
为什么被折叠?



