主题
JVM有很多参数,当我们通过命令行启动Java程序时(例如, java -jar app.jar)
我们经常指定各种参数选项。很多人对为什么有时我们使用 -D ,有时我们使用 -X ,偶尔我们使用 -XX 感到困惑。
名词解释
JVM 实际上支持三种类型的选项:standard options 标准选项、non-standard options非标准选项(也称为额外选项)和 Advanced Options 高级选项。
之所以有这么多选择,是因为 JVM 只是一个具有不同实现的规范,例如 HotSpot、OpenJ9、GraalVM、Azul Zing 等。
不同 JVM 实现支持的选项可能有所不同,但所有 JVM 实现都支持某些选项。这些是标准选项。
标准选项 standard options
所有 JVM 实现都支持标准选项。
打开cmd命令行,输入java即可看到:
上述命令的输出可能仍然有点不知所措,但您可以看到:
- -cp 用于指定类路径。
- -version 用于输出 Java 版本信息。
- -D 允许设置系统属性。
- -X 可以输出有关非标准(额外)选项的帮助信息。
- …
我们前面提到的两者都 -D -X 出现了。此外,Java 告诉我们这是一个 -D 标准的 JVM 选项。
Java 允许我们以键值对的形式设置系统属性,其中 -D=
例如: -Duser=Alice 设置一个简单的系统属性,其中键为 user ,值为 Alice 。随后,我们可以在程序中检索 的 user 值:
System.getProperty("user"); //Alice
此外,我们也可以通过代码覆盖这个属性的值:
System.setProperty("user", "Bob");
现在,我们应该了解 -D :
-D 的用法,是一个标准的 JVM 选项,它允许我们设置系统属性。
Non-Standard Options 非标准选项
与标准选项类似,我们可以直接使用 java 命令来获取 JVM 支持的所有非标准选项。
以 开头 -X 的选项是非标准选项。你们中的许多人可能会从输出中认出两个熟悉的选项: -Xms 和 -Xmx 。
这两个参数用于设置 JVM 的堆大小,前者设置初始堆大小和最小堆大小,后者设置最大堆大小。
例如, -Xms100m -Xmx1g 将初始堆大小设置为 100MB,并允许堆使用最多 1GB 的内存。
需要注意的是,输出中列出的非标准选项不一定受所有 JVM 的支持。
Advanced Options 高级选项
高级选项以 开头 -XX 。开发人员通常使用这些选项来调整 JVM 的行为、性能或调试输出。根据参数类型,高级选项可分为两类:布尔选项和带参数的选项。
布尔选项 Boolean Options
布尔选项是简单的开关,不需要参数。您可以使用 + (例如, -XX:+Option ) 启用功能,并使用 - (例如, -XX:-Option ) 禁用该功能。
例如,在 HotSpot JVM 中,可以使用 启用方法 -XX:+Inline 内联。但是,为了提高性能,HotSpot 默认启用方法内联,因此您可以使用 -XX:-Inline
Options with Parameters 带参数的选项
另一种类型的高级选项需要设置相应的参数值,通常采用以下
-XX:OptionName=OptionValue 格式。
- -XX:ErrorFile=file.log 告诉 JVM 在发生不可恢复的错误时写入 file.log 错误信息。
- -XX:TreadStackSize=256k 将线程堆栈大小设置为 256k 。
- -XX:MaxHeapSize=1g 将最大堆大小限制为 1GB ,等效于 -Xmx1g 。
总结
以上就是对应java启动JVM参数配置了~
结束。。