为什么我们需要在 JVM 参数前加上 -D
例如从命令行运行 jar 时?例如
java -jar -DmyProp="Hello World" myProgram.jar
用于运行带有系统参数myProp
的myProgram.jar
。那么为什么是领先的-D
?为什么 Java 的架构师不能让我们简单地做:
java -jar -myProp="Hello World" myProgram.jar
我希望得到的答案不仅仅是“因为它就是这样”。
额外问题:为什么字母 -D
与任何其他字母不同,它代表什么?
注意:此问题首先询问为什么需要使用“D”或任何其他字母。它不太关心选择特定字母“D”而不是任何其他字母,尽管这是一个额外的问题。
奖金问题在这里有答案:In java -D what does the D stand for? .
最佳答案
Why couldn't the architects of Java let us simply do:
java -jar -myProp="Hello World" myProgram.jar
它现在可以工作,但假设在下一个 Java 版本中引入了一个 -myProp
参数作为 JVM 选项。
如何区分 -myProp
和 -myProp
JVM 选项?没办法。
因此,使用-D
来定义 系统属性存在一个明显的理由。
作为其他示例,假设您的程序依赖于 -client
系统属性,而不是 -myProp
。
它不会运行:
java -jar -client="davidxxx" myProgram.jar
您会遇到 JVM 错误,例如:
Unrecognized option: -client=davidxxx
as -client
是一个 JVM 标准选项,它没有任何值(value)。
但是如果你使用 -D-client
,现在就可以了,因为这里 -Dclient
被定义为不同于 -client 的系统属性
标准 JVM 选项:
java -jar -D-client="davidxxx" myProgram.jar
或者同时使用:
java -jar -client -D-client="davidxxx" myProgram.jar
To go further, not all JVM arguments start with -D
.但它们中的大多数都有一个前缀(-D
、-X
、-XX
),允许以某种方式定义命名空间。
您有不同类别的 JVM 参数:
1.标准选项(-D
但不仅如此)。
这些是 JVM 的所有实现都支持的最常用的选项。
您使用 -D
来指定系统属性,但其中大多数没有任何前缀:-verbose
、-showversion
和所以对于...
<强>2。非标准选项(以 -X
为前缀)
这些选项是特定于 Java HotSpot 虚拟机的通用选项。
例如:-Xmssize
、-Xmxsize
3.高级运行时选项(以 -XX
为前缀)
这些选项控制 Java HotSpot VM 的运行时行为。
4.高级 JIT 编译器选项(以 -XX
为前缀)
这些选项控制 Java HotSpot VM 执行的动态即时 (JIT) 编译。
5.高级可维护性选项(以 -XX
为前缀)
这些选项提供了收集系统信息和执行大量调试的能力。
6.高级垃圾收集选项(以 -XX
为前缀)
这些选项控制 Java HotSpot VM 执行垃圾收集 (GC) 的方式。
关于java - 为什么 JVM 参数以 "-D"开头?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44745261/