JVM 参数项区别:-D、-X、-XX
JVM 参数项区别:-D、-X、-XX
December 7, 2023
JVM 包含多种不同类型的参数选项:
- -D 用来设置系统属性,属于标准选项
- -X 设置非标准选项,支持的选项范围跟具体的 JVM 实现有关
- -XX 设置高级选项,允许开发者调整 JVM 的行为、性能、输出调试信息,支持的选项范围也跟具体的 JVM 实现有关
标准选项(standard options)-D
标准选项是所有 JVM 实现都会支持。在控制台输入 java
这个命令,除了能看到 java 命令的使用手册,还能看到机器上默认的 JVM 所支持的所有标准选项。
Java 允许我们以 -D
可以在命令行中带入参数:
-Dfoo=bar1
也可以在java代码中,设置或者读取值
// 设置值
System.getProperty("foo");
// 读取值
System.setProperty("foo", "bar2");
非标准选项(non-standard options,或者 extra-options) -X
和标准选项类似,可以直接通过 java -X
命令获取 JVM 支持的所有非标准选项。比如下面两个最常见的选项:-Xms
非标准选项的支持是与 JVM 的具体实现紧密相关的,并且它们在不同的版本可能会发生改变。
高级选项(advanced options)-XX
高级选项以 -XX 开头,这些选项一般用于开发者调整 JVM 的行为、性能或输出调试信息等。
根据参数值类型的不同,高级选项又可以分为两类:布尔类型的选项和带参数的选项。
(1) 布尔选项
布尔类型的选项不带参数,只是一个开关。开关是不需要参数的,可以通过 +
启用某个功能(-XX:+Option),而通过 -
禁用某个功能(-XX:-Option)。
例如,在 HotSpot JVM 中,通过 -XX:+Inline
启用方法内联。不过 HotSpot 为了提高性能,默认是开启了方法内联的,所以可以通过 -XX:-Inline
关闭方法内联。
(2) 带参选项
还有一类高级选项是需要设置相应的参数值的,形式一般为:-XX:OptionName=OptionValue。
下面是一些例子:
-XX:ErrorFile=file.log 告诉 JVM:当不可恢复的错误发生时,将错误信息写入 file.log 这个文件。
-XX:TreadStackSize=256k 将线程栈的大小设置为 256k。
-XX:MaxHeapSize=1g 将堆的最大大小限制为 1GB,等价于 -Xmx1g
使用 java -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -XX:+PrintFlagsFinal -version
命令可以查看 JVM 所有的选项
参考:
最后更新于