为什么Java的架构师不能让我们简单地做:
java -jar -myProp="Hello World" myProgram.jar
它今天可以工作,但是假设在下一个Java版本-myProp
中,引入了一个参数作为JVM选项。
如何-myProp
与-myProp
JVM选项区分开?没门。
因此,使用明显的理由-D
来定义系统属性。
作为另一个示例,-myProp
您不必假设程序依赖于-client
系统属性。
它不会运行:
java -jar -client="davidxxx" myProgram.jar
您将遇到JVM错误,例如:
无法识别的选项:-client = davidxxx
就像-client
JVM标准选项一样,它没有价值。
但是,如果您使用-D-client
,那么现在很好,因为这里-Dclient
定义为不同于-client
标准JVM选项的系统属性:
java -jar -D-client="davidxxx" myProgram.jar
或同时使用:
java -jar -client -D-client="davidxxx" myProgram.jar
更进一步,并非所有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)。