【发布时间】:2019-12-17 00:49:49
【问题描述】:
什么是 vm 参数中的 -D 它说明了为什么我们必须在 vm 参数中始终指定 -D。有什么标准吗?如果是,那是什么以及在哪里指定。
【问题讨论】:
-
java -help:: -D= 另见System Properties。设置系统属性
标签: java
什么是 vm 参数中的 -D 它说明了为什么我们必须在 vm 参数中始终指定 -D。有什么标准吗?如果是,那是什么以及在哪里指定。
【问题讨论】:
java -help :: -D标签: java
-D 设置当前运行的 java 程序可以访问的属性值。它允许程序员设置程序运行所需的值,但程序不知道这些值是什么,因此用户必须设置它们。这可以像将文件路径或资源位置设置为更改程序行为的更复杂的事情一样简单。
举个例子
String value = System.getProperty("foo");
System.out.println("My value is: " + value);
然后当你运行程序如:
java -Dfoo="bar" -jar MyProg.jar
你会看到输出如下:
My value is: bar
【讨论】:
-D 选项用于将系统属性传递给 JVM。名称/值对被添加到 System 属性对象中,并且可以在 JVM 初始化期间使用。
为什么我们必须在 vm 参数中始终指定 -D
(如果你问为什么java 命令中的所有命令行选项都可以被解释为“VM 参数” 以-D 开头......你错了。其中许多不是以-D 开头的。请查看java command manual page。)
如果您使用System.setProperty(...) 在(您的)代码中设置属性,JVM 可能在您的代码运行之前已经查找了该属性。很多 JVM 的初始化是由类加载/静态初始化触发的。在相关的静态初始化之前,通常很难让您的代码运行。
另一方面,典型的应用程序不需要设置系统属性。默认设置通常足够好。
有什么标准吗?如果是,那是什么以及在哪里指定。
JVM 可以识别许多系统属性。它们记录在 javadocs 和其他地方,但没有一个页面可以涵盖所有内容 (AFAIK)。
但您的代码和第三方库也可以定义自己的系统属性。
参考资料:
以上列表并不详尽……
【讨论】: