JVM 参数全解析:从基础配置到高级调优
JVM 参数是控制 JVM 运行行为的核心手段,合理配置参数能显著提升应用性能、避免内存溢出等问题。JVM 参数分为标准参数、非标准参数(-X 开头)和非标准化参数(-XX 开头),本文将系统梳理常用参数的分类、作用及配置方式,帮助开发者根据场景选择合适的参数。
JVM 参数类型
标准参数(稳定,跨版本兼容)
以 - 开头,如 java -version、java -classpath 等,本文不重点展开。
非标准参数(-X 开头,半稳定)
由 JVM 实现定义,可能随版本变化,常用参数如下:
| 参数 |
作用描述 |
-Xmixed |
混合模式执行(解释器 + JIT 编译,默认启用) |
-Xint |
仅使用解释器执行(禁用 JIT,适合调试) |
-Xbootclasspath |
设置引导类加载路径(如指定自定义核心类库) |
-Xms<size> |
初始堆内存(等价于 -XX:InitialHeapSize,如 -Xms2g) |
-Xmx<size> |
最大堆内存(等价于 -XX:MaxHeapSize,如 -Xmx4g) |
-Xss<size> |
线程栈大小(等价于 -XX:ThreadStackSize,如 -Xss1m) |
-Xloggc:<file> |
将 GC 日志写入文件(带时间戳,如 -Xloggc:gc.log) |
非标准化参数(-XX 开头,不稳定,最常用)
用于精细控制 JVM 内部行为,分为两类:
- Boolean 类型:
-XX:+<option>(启用)、-XX:-<option>(禁用),如 -XX:+PrintGCDetails。
- KV 类型:
-XX:<option>=<value>,如 -XX:NewRatio=2。
常用 JVM 参数详解
参数查看与调试
| 参数 |
作用描述 |
-XX:+PrintCommandLineFlags |
程序启动前打印手动或自动设置的 -XX 参数 |
-XX:+PrintFlagsInitial |
打印所有 -XX 参数的默认初始值 |
-XX:+PrintFlagsFinal |
打印运行时生效的 -XX 参数值(最终值) |
-XX:+PrintVMOptions |
仅打印用户设置的 JVM 参数 |
堆内存配置(核心)
堆内存是 JVM 管理的核心区域,参数直接影响 GC 效率和内存利用率: