JVM内存参数详解

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 的参数
    

注意事项

  1. 参数顺序:部分参数依赖其他参数(如启用 ZGC 需先解锁实验性选项)。
  2. 版本差异:不同 JDK 版本支持的参数可能不同(如 CMS 在 JDK14 后被移除)。
  3. 监控验证:调整参数后需通过工具(如 jstatVisualVM)监控 GC、内存使用情况。

掌握这些参数可以帮助优化 JVM 性能、减少 GC 停顿,并快速排查内存泄漏等问题。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

走过冬季

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值