1. JVM参数基础认知
作为一名Java开发者,理解JVM参数是必备技能。记得我第一次面试时被问到"你熟悉哪些JVM参数",当时只能支支吾吾说出几个常见参数,场面相当尴尬。经过多年实践,我总结出JVM参数可以分为三大类:
1.1 标准参数(-开头)
这类参数在所有JVM实现中都必须支持,具有很好的向后兼容性。最常用的包括:
-verbose:gc:输出GC日志-server/-client:选择JVM运行模式-version:显示JVM版本信息
实际经验:生产环境建议始终使用
-server模式,即使是在开发机器上。我在测试时发现,某些应用在-client模式下性能会下降30%以上。
1.2 非标准参数(-X开头)
这类参数是各JVM实现的扩展参数,不同厂商可能有所不同。常见的有:
-Xms:初始堆大小-Xmx:最大堆大小-Xss:线程栈大小-Xmn:新生代大小
避坑指南:我曾遇到一个案例,团队将
-Xms和-Xmx设置不同值,导致系统在流量高峰时频繁调整堆大小,产生了严重的性能波动。建议这两个值设为相同。
1.3 非稳定参数(-XX开头)
这类参数最丰富但也最危险,可能随JDK版本变化。使用时需要特别注意:
-XX:+UseG1GC:启用G1垃圾收集器-XX:MaxMetaspaceSize:设置元空间最大值-XX:+HeapDumpOnOutOfMemoryError:OOM时生成堆转储
血泪教训:有次升级JDK后,某个
-XX参数突然失效,导致系统频繁Full GC。现在我会在升级前仔细检查参数变更日志。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 内存区域参数详解
2.1 堆内存设置
堆是JVM中最重要的内存区域,合理设置至关重要:
bash复制-Xms4g -Xmx4g -Xmn2g -XX:SurvivorRatio=8
-Xms和-Xmx:建议设为相同值,避免堆动态调整带来的性能损耗-Xmn:新生代大小,通常占整个堆的1/3到1/2-XX:SurvivorRatio:控制Eden和Survivor区的比例
调优案例:某电商系统在大促时频繁Ful
