从命令行读取Java系统属性

sak*_*zai 39 java environment-variables

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

 java  -D<name>=<value>  //set a system property
Run Code Online (Sandbox Code Playgroud)

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

Adr*_*nRM 76

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

java -XshowSettings:properties -version
Run Code Online (Sandbox Code Playgroud)

自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 <pid> VM.system_properties
Run Code Online (Sandbox Code Playgroud)

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

jcmd <pid> VM.flags
jcmd <pid> VM.command_line
jcmd <pid> GC.run 
Run Code Online (Sandbox Code Playgroud)

  • 我不知道。我建议您发布一个问题并将其链接到此问题。 (2认同)

Ren*_*ink 17

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

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

$ jps -v
Run Code Online (Sandbox Code Playgroud)

输出

6632  -Dosgi.requiredJavaVersion=1.6 -Xms1024m -Xmx2048m -XX:MaxPermSize=512m
Run Code Online (Sandbox Code Playgroud)

jps 位于 JDK_HOME/bin

编辑

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

$ jinfo 6632
Run Code Online (Sandbox Code Playgroud)

这个工具也打印出来了 java.ext.dirs