JVM 核心调优:十个最常用的配置参数
JVM 参数配置是保障 Java 应用稳定运行的基石。在生产环境中遇到内存溢出或性能瓶颈时,优先检查以下核心参数。
1. -Xms:初始堆大小
启动时立即占用的堆内存大小。建议与最大堆大小保持一致,避免运行时动态扩容带来的性能抖动。
2. -Xmx:最大堆大小
Java 堆允许的最大内存上限。若超出此限制,将抛出 java.lang.OutOfMemoryError: Java heap space 错误。合理设置该值需结合物理内存与业务负载。
3. -Xss:线程栈大小
每个线程私有的栈空间,通常仅几百 KB。它决定了函数调用的深度及局部变量的存储容量。当出现大量递归调用或局部变量过多时,容易触发 StackOverflowError。
4. -XX:NewSize:新生代绝对大小
直接指定新生代(Young Generation)的内存大小。配合 -XX:MaxNewSize 使用效果更佳。
5. -XX:NewRatio:年轻代与老年代比值
控制新生代和老年代的比例。例如设置为 3,则新生代占比为总堆空间的 1/4。调整该比例可优化对象晋升策略。
6. -XX:MaxPermSize:持久代大小
用于设置永久代(PermGen)的大小。在 Java 8 之前,java.lang.OutOfMemoryError: PermGen space 错误常由此引发。注意 Java 8+ 已改用 Metaspace,此参数不再适用。
7. -XX:SurvivorRatio:Eden 区与 Survivor 区比值
定义年轻代中 Eden 区与两个 Survivor 区的比例。默认通常为 8:1:1。根据对象存活率调整此值,可减少对象过早进入老年代的风险。
8. -XX:HeapDumpOnOutOfMemoryError:OOM 时自动转储
发生内存溢出时,自动将当前堆状态导出为文件。这是排查 OOM 问题的关键手段,无需手动介入即可保留现场数据。
9. -XX:HeapDumpPath:堆转储文件路径
指定上述堆快照文件的保存位置。确保该路径所在磁盘有足够剩余空间,否则可能导致转储失败。
10. -XX:OnOutOfMemoryError:异常处理脚本
当 OOM 发生时执行指定的外部脚本。常用于发送报警邮件、记录日志或尝试重启服务,提升系统的自愈能力。
以上参数组合使用,能有效提升 JVM 的可观测性与稳定性。实际部署前,建议在测试环境充分验证参数对 GC 行为的影响。


