jvm如何从Java应用程序内部获取VM参数?
我需要检查是否显式设置了一些可以传递给JVM的选项,或者是否有其默认值
更具体地说:
我需要创建一个本机堆栈大小高于默认堆栈大小的特定线程,但如果用户希望通过指定-Xss
选项自己处理这些事情,我希望创建具有默认堆栈大小的所有线程(将由用户在-Xss选项中指定)
我已经检查了像java.lang.System
和java.lang.Runtime
这样的类,但是它们没有给我任何关于VM参数的有用信息
有没有办法得到我需要的信息
你可以在下面搜索框中键入要查询的问题!
我需要检查是否显式设置了一些可以传递给JVM的选项,或者是否有其默认值
更具体地说:
我需要创建一个本机堆栈大小高于默认堆栈大小的特定线程,但如果用户希望通过指定-Xss
选项自己处理这些事情,我希望创建具有默认堆栈大小的所有线程(将由用户在-Xss选项中指定)
我已经检查了像java.lang.System
和java.lang.Runtime
这样的类,但是它们没有给我任何关于VM参数的有用信息
有没有办法得到我需要的信息
# 1 楼答案
如果需要java进程的整个命令行,可以使用:JvmArguments.java (使用JNA+/proc的组合来覆盖大多数unix实现)
# 2 楼答案
使用此代码,您可以获得JVM参数:
# 3 楼答案
我还没有尝试专门获取VM设置,但是JMX实用程序中有大量信息,特别是MXBean实用程序。这就是我的出发点。希望你能在那里找到帮助你的东西
sun网站对这项技术有很多介绍:
http://java.sun.com/javase/6/docs/technotes/guides/management/mxbeans.html
# 4 楼答案
我发现HotSpot列出了管理bean中除-client和-server之外的所有VM参数。因此,如果您从VM名称推断出-client/-server参数,并将其添加到运行时管理bean的列表中,您将得到完整的参数列表
以下是SSCCE:
如果希望参数位于
List<String>
中,则可以将其缩短最后一点注意:我们可能还想扩展它来处理命令行参数中包含空格的罕见情况
# 5 楼答案
启动时通过此
-Dname=value
然后在你的代码中你应该使用
为了得到那个值