程序参数和虚拟机参数有什么区别?

46

我发现只有当我将-Dcontext=web放入VM参数中时,才能通过System.getproperty方法读取该值。我想知道这两者之间的区别是什么?

5个回答

61

程序参数是传递给你的程序并在主方法的args数组中可用的参数。

 public static void main(String[] args)

VM参数会传递给虚拟机并指示虚拟机执行某些操作。您可以控制堆大小等操作。可以通过调用System.getProperty()方法从程序中访问它们,就像您所描述的那样。


仅补充一点关于-Djava.library.path=/path/to/folder/的微妙之处。尽管System.getProperty("java.library.path")返回包含本地库所在位置/path/to/folder/的字符串,但System.loadLibrary()无法链接本地库。例如,在Eclipse IDE中,您必须在IDE菜单设置中特别设置此文件夹位置的值。通过System.setProperty()以编程方式设置它将不起作用。 - daparic

7

enter image description here

程序参数:程序参数是传递给您的应用程序的参数,可以通过 main 方法的“args”字符串数组参数访问。

虚拟机参数:虚拟机参数是 JVM 执行程序所需的环境或系统参数。VM 参数从系统属性读取,如以下 Java 指令所示:

System.getProperty(sysProp1)

代码片段:

public static void main(String[] args) {
    String sysProp1 = "sysProp1";
    System.out.println("\t System Propery Name:" + sysProp1 + ", Value:" + System.getProperty(sysProp1));
    System.out.println("\t Program Variable Test Propery Name:" + args[0]);
}

有两种方法可以传递这两个参数值。

来自Eclipse:

如上图所示

命令行参数:

 java -cp -DsysProp1=testing123456 projectJar-2.0-SNAPSHOT-jar-with-dependencies.jar 123

为了更好地呈现,可以使用多行文本

 java -cp 
      -DsysProp1=testing123456 
      projectJar-2.0-SNAPSHOT-jar-with-dependencies.jar 
      123

3
顺便提一下,“VM参数”需要放在“jar”之前,并使用“-D”标记,“程序参数”则需要放在“jar”之后。 - Manuel Jordan

2

程序参数放入main()方法中:

public static void main(String[] args) // here

2
程序参数可以通过您的main(String args[])方法中的args []获得。

1
  • 程序参数 - 我们通常传递到程序中的参数。这种类型的参数可以在主方法中使用“args”字符串数组进行访问。
  • 虚拟机参数 - 传递给Java解释器的参数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接