java - 为什么 JVM 参数以 "-D"开头?

标签 java command-line

为什么我们需要在 JVM 参数前加上 -D 例如从命令行运行 jar 时?例如

java -jar -DmyProp="Hello World" myProgram.jar

用于运行带有系统参数myPropmyProgram.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/

相关文章:

java - Java:使用Java Media Framework的音频捕获设备列表

java - 如何将一幅图像的一部分复制到另一幅图像?

C++从文件中读取 - 跳过文件的第一行,最后一行重复两次

android - 错误 : package path is not valid. 有效的系统镜像路径为 :ository. .. null

c# - 文件路径中的空格问题 - C# 中的命令行执行

java - 用java从网站打开文件

java - 使用工作线程时返回语句

java - 如何使用 Java 命令行将文本文件读入扫描仪

regex - Sed - 删除字符串前的 x 个字符

java - 编译基本的java项目