Answers:
通过此代码,您可以获取JVM参数:
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
...
RuntimeMXBean runtimeMxBean = ManagementFactory.getRuntimeMXBean();
List<String> arguments = runtimeMxBean.getInputArguments();
              final StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();       final String mainClassName = stackTrace[stackTrace.length - 1].getClassName());
                    sun.java.command系统属性中;我说过,该属性可用于获取主类名称(尽管正如@laz所指出的,我没有提到,该属性仅存在于Oracle的JVM中)。
                    在启动时通过 -Dname=value
然后在代码中应该使用
value=System.getProperty("name");
获得那个价值
-Dname=value是JVM参数,并且参数之间没有内在的区别-X。实际上,它们都是在命令行而不是在应用程序中传递给java的,例如,在maven中,您可以将as传递给java -Drun.jvmArguments=...。我相信这就是为什么它被赞成。
                    我发现HotSpot列出了管理Bean中除-client和-server之外的所有VM参数。因此,如果从VM名称推断-client / -server参数并将其添加到运行时管理bean的列表中,则将获得完整的参数列表。
这是SSCCE:
import java.util.*;
import java.lang.management.ManagementFactory;
class main {
  public static void main(final String[] args) {
    System.out.println(fullVMArguments());
  }
  static String fullVMArguments() {
    String name = javaVmName();
    return (contains(name, "Server") ? "-server "
      : contains(name, "Client") ? "-client " : "")
      + joinWithSpace(vmArguments());
  }
  static List<String> vmArguments() {
    return ManagementFactory.getRuntimeMXBean().getInputArguments();
  }
  static boolean contains(String s, String b) {
    return s != null && s.indexOf(b) >= 0;
  }
  static String javaVmName() {
    return System.getProperty("java.vm.name");
  }
  static String joinWithSpace(Collection<String> c) {
    return join(" ", c);
  }
  public static String join(String glue, Iterable<String> strings) {
    if (strings == null) return "";
    StringBuilder buf = new StringBuilder();
    Iterator<String> i = strings.iterator();
    if (i.hasNext()) {
      buf.append(i.next());
      while (i.hasNext())
        buf.append(glue).append(i.next());
    }
    return buf.toString();
  }
}
如果您想在中使用参数,可以将其缩短List<String>。
最后说明:我们可能还想扩展它,以处理命令行参数中包含空格的罕见情况。
我没有尝试专门获取VM设置,但是JMX实用程序(特别是MXBean实用程序)中有很多信息。这就是我要开始的地方。希望您能找到一些可以帮助您的东西。
Sun网站对技术有很多建议:
http://java.sun.com/javase/6/docs/technotes/guides/management/mxbeans.html
如果需要Java进程的整个命令行,则可以使用:JvmArguments.java (使用JNA + / proc的组合来覆盖大多数unix实现)