为什么我们需要在 JVM 参数前加上 -D
例如,当从命令行运行 jar 时?例如
java -jar -DmyProp="Hello World" myProgram.jar
用于使用系统参数运行 myProgram.jar
myProp
。那么为什么领先 -D
?为什么 Java 的架构师不能让我们简单地做:
java -jar -myProp="Hello World" myProgram.jar
我希望得到的答案不仅仅是“因为事情就是这样”。
附加 问题: 为什么字母 -D
与任何其他字母相反,它代表什么?
注意: 这个问题问的 是为什么 首先需要使用“D”或任何其他字母。它不太关心特定字母“D”的选择而不是任何其他字母,尽管这是作为奖励问题提出的。
奖金问题在这里有一个答案: 在 java -D 中,D 代表什么? .
原文由 Colm Bhandal 发布,翻译遵循 CC BY-SA 4.0 许可协议
它今天可以工作,但假设在下一个 Java 版本中,一个
-myProp
参数作为 JVM 选项被引入。如何区分
-myProp
和-myProp
JVM 选项?没门。因此,使用
-D
来 定义 系统属性是一个明显的理由。作为其他示例,而不是
-myProp
假设您的程序依赖于-client
系统属性。它不会运行:
您会遇到 JVM 错误,例如:
as
-client
是一个 JVM 标准选项,不需要任何值。但是,如果您使用
-D-client
,现在可以正常使用了-Dclient
被定义为不同于-client
标准 JVM 选项的系统属性:或者同时使用:
更进一步,并非所有 JVM 参数都以
-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) 的方式。