从命令行读取Java系统属性

有没有更好的方法从命令行打印系统属性? 我们可以设置属性,例如

java -D= //set a system property 

没有写一个class来做那个? 如果不可能,为什么从命令行执行此操作不可行/可行/不好?

您可以在Hotspot JVM 1.7及更高版本中使用-XshowSettings标志(1.6不支持):

 java -XshowSettings:properties -version 

自2010年底以来,OpenJDK一直支持这一旗帜。

见http://marxsoftware.blogspot.de/2016/02/hotspot-jvm-XshowSettings.html

编辑2016年12月14日

Oracle JVM附带了工具jcmd,它允许您查看正在运行的JVM中存在的标志。 看到:

https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr006.html

对于此用例,您可以使用:

 jcmd  VM.system_properties 

但是还有许多其他有用的命令。 例如:

 jcmd  VM.flags jcmd  VM.command_line jcmd  GC.run 

您可以使用jps jdk附带的工具。 它可以打印出传递给java进程的系统属性。

例如:在我的系统上,eclipse正在运行

 $ jps -v 

输出

 6632 -Dosgi.requiredJavaVersion=1.6 -Xms1024m -Xmx2048m -XX:MaxPermSize=512m 

jps位于JDK_HOME/bin

编辑

如果您希望所有属性都使用同样位于JDK_HOME/bin的jinfo工具。 要使用它,您必须知道要从中获取信息的java进程的进程ID。 例如

 $ jinfo 6632 

该工具还打印出java.ext.dirs