JVM 参数类型大致分为以下几类:
- 标准参数(-):保证在所有的 JVM 实现都支持的参数
- 非标准参数(-X):通用的,特定于 HotSpot 虚拟机的参数,这些参数不保证在所有 JVM 实现中被支持,且可能会更改
- 高级运行时参数(-XX):此类参数不建议随意使用,这些参数用于调整 HotSpot VM 的特定区域,不保证所有的 JVM 实现都支持,并且可能会发生改变
参数分为布尔类型和值类型,布尔类型被用于启用默认禁用的特性,或者禁用默认启动的特性,这类参数不用指定值,使用 + 号来启动参数如 -XX:+OptionName
,使用 - 号来禁用布尔如 -XX:-OptionName
。
值类型的参数可以使用 :或者 = 来分隔参数名和参数值,或者值直接跟在参数后面,如果参数值要指定字节大小,你可以不使用后缀,或者使用 k/K 来表示 KB,使用 m/M 来表示 MB,使用 g/G 来表示 GB,如果参数值要指定百分比,你需要使用 0-1 的数字,比如 0.25 表示 25%。
标准参数
标准参数,可以理解为 java 命令的可选项,可以使用 java 命令查看标准参数:
标准参数的含义:
参数 | 含义 |
---|---|
-classpath/-cp | 类搜索路径,可以使用目录或者 zip/jar 文件的路径,多个用 ;分隔 |
-D<name>=<value> | 设置系统属性 |
-client | 设置 jvm 使用 client 模式,特点是启动速度比较块,但运行时性能和内存管理效率不高,通常用于客户端应用程序或 PC 应用开发和调试 |
-server | 设置 jvm 使用 server 模式,默认就是 server 模式,特点是启动速度比较慢,但运行时性能和内存管理效率很高,适用于生产环境 |
-verbose:[class|gc|jni] | 启动详细输出 |
-X | 输出非标准参数的帮助文档 |
非标准参数
非标准参数是特定于 HotSpot VM 的通用参数,可以使用 java -X
命令查看,不同 JDK 版本可能会有不同。
非标准参数的含义:
参数名 | 含义 |
---|---|
-Xint | 以仅解释模式运行应用程序。对本地代码的编译被禁用,所有字节码都由解释器执行。JIT 编译器提供的性能优势在这种模式下并不存在 |
-Xmixed | 由解释器执行所有字节码,hot method 除外,后者被由 JIT 编译成本地代码 |
-Xincgc | 开启增量 gc(默认为关闭),这有助于减少长时间 GC 时应用程序出现的停顿,但由于可能和应用程序并发执行,所以会减低 CPU 对应用的处理能力 |
-Xloggc:file | 与 -verbose:gc 功能类似,只是将每次 GC 事件的相关情况记录到一个文件中,文件的位置最好在本地,以避免网络的潜在问题。 |
-Xms | 设置堆的初始容量和最小容量,它必须时 1024 的倍数且不能小于 1M,需要注意的是 -XX:InitalHeapSize 也可以指定堆初始容量,如果这两个都出现在命令行中,则以最后一个参数为准 |
-Xmx | 指定堆的最大容量,它必须时 1024 的倍数且不能小于 2M,它等价于 -XX:MaxHeapSize 参数 |
-Xss | 设置线程堆栈的容量,默认值依赖于操作系统,它类似于 -XX:ThreadStackSize |
-Xmn | 新生代的初始容量和最大容量,此处的大小指的是 eden+2*surivor sapce,你也可以使用 -XX:NewSize 设置初始容量,使用 -XX:MaxNewSize 设置最大容量,如果都出现在命令行中则以最后一个参数为准 |
高级运行时参数
这些参数控制 HotSpot VM 的运行时行为。
参数名 | 含义 |
---|---|
-XX:MaxDirectMemorySize=size | 设置 NIO 中直接内存的最大空间,可以使用单位如 k、m、g,默认情况下为 0,这表示 JVM 自动选择 NIO 直接内存的大小 |
-XX:+PrintCommandLineFlags | 打印在命令行中指定的参数 |
-XX:ThreadStackSize=size | 设置 Java 线程堆栈大小 |
-XX:+HeapDumpOnOutOfMemoryError | 当出现 OOM 时,在当前目录生成堆转储文件,默认关闭 |
-XX:HeapDumpPath=path | 当 -XX:+HeapDumpOnOutOfMemoryError 启用后,生成堆转储文件的路径,默认情况下在当前目录下生成,文件名为 java_pid${pid}.hprof,你可以自定义文件名:-XX:HeapDumpPath=/var/log/java/java_heapdump.hprof |
-XX:LogFile=path | 设置 HotSpot 的日志文件路径,默认生成在当前工作目录,名为 hotspot.log |
-XX:InitialHeapSize=size | 设置堆的初始容量 |
-XX:MaxHeapSize=size | 设置堆的最大容量 |
-XX:MaxNewSize=size | 设置新生代的最大容量 |
-XX:+PrintGC | 打印 GC 事件,默认禁用 |
-XX:+PrintGCDetails | 打印 GC 事件的详细信息,默认禁用 |
-XX:SurvivorRatio=ratio | 设置 eden/survivor 的比值,默认值为 8 |
-XX:+UseConcMarkSweepGC | 使用 GMS 垃圾收集器收集老年代 |
-XX:+UseG1GC | 使用 G1 垃圾收集器 |
-XX:+UseParallelGC | 使用 parallel scavenge 垃圾收集器 |
-XX:+UseParallelOldGC | full gc 使用 parallel 垃圾收集器,默认禁用,当启用 -XX:+UseParallelGC 时自动启用 |
-XX:+UseParNewGC | 在新生代中使用 parallel thread 垃圾收集器,默认禁用,当启用 -XX:+UseConcMarkSweepGC 时自动启用 |
-XX:+UseSerialGC | 使用 serial 垃圾收集器 |
参考:
https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html#BABDJJFI
https://juejin.cn/post/7033554940677062670