从命令行读取 Java 系统属性

新手上路,请多包涵

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

 java  -D<name>=<value>  //set a system property

没有写一个类来做到这一点?

如果不可能,为什么从命令行执行此操作不可能/不可行/不好?

原文由 sakhunzai 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 773
2 个回答

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

 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 <pid> VM.system_properties

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

 jcmd <pid> VM.flags
jcmd <pid> VM.command_line
jcmd <pid> GC.run

原文由 AdrianRM 发布,翻译遵循 CC BY-SA 3.0 许可协议

你可以使用 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

原文由 René Link 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题