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