如何从Java应用程序内部获取虚拟机参数?

我需要检查是否可以传递给JVM的某些选项被显式设置或者是否具有默认值。

更具体地说:
我需要创build一个具有比默认堆栈大小更高的本地堆栈大小的特定线程,但是如果用户想通过指定-Xss选项来自己处理这些事情,我想创build所有具有默认堆栈大小的线程(将被指定由用户在-Xss选项)。

我已经检查了像java.lang.Systemjava.lang.Runtime这样的类,但是这些并没有给我关于vmargs信息。

有什么方法可以获得我需要的信息吗?

有了这个代码,你可以得到JVM参数:

 import java.lang.management.ManagementFactory; import java.lang.management.RuntimeMXBean; ... RuntimeMXBean runtimeMxBean = ManagementFactory.getRuntimeMXBean(); List<String> arguments = runtimeMxBean.getInputArguments(); 

在启动时传递这个-Dname=value

然后在你的代码中,你应该使用

 value=System.getProperty("name"); 

得到那个价值

我还没有尝试过专门获取VM设置,但JMX实用程序(特别是MXBean实用程序)中有大量信息。 这将是我会开始的地方。 希望你find一些帮助你的东西。

太阳网站上有一堆技术:

http://java.sun.com/javase/6/docs/technotes/guides/management/mxbeans.html

如果你想要你的java进程的整个命令行,你可以使用: JvmArguments.java (使用JNA + / proc的组合来覆盖大部分的unix实现)