有什么方法可以显示正在运行的 JVM 中使用的标志吗?

Dav*_*ley 5 java jvm

尽管我们已经为应用程序显式设置了许多 JVM 标志,但很难知道是否: 1. 布尔标志已默认打开(默认值在次要 JDK/JRE 更新之间发生了变化) 2. 一个标志否定了其他标志 3.特定系统上给定任意标志的默认值是什么(由 Java 人体工程学设置)

总结一下:有没有类似的命令行工具

java -XX:+PrintFlagsFinal
Run Code Online (Sandbox Code Playgroud)

,我可以在哪里检查已运行的 JVM 的所有标志值?

Pet*_*rey 6

对于 HotSpot,您可以使用(来自 ehcache)

private static String getHotSpotVmOptionValue(String name) {
    try {
        MBeanServer server = ManagementFactory.getPlatformMBeanServer();
        ObjectName beanName = ObjectName.getInstance("com.sun.management:type=HotSpotDiagnostic");
        Object vmOption = server.invoke(beanName, "getVMOption", new Object[] {name}, new String[] {"java.lang.String"});
        return (String)((CompositeData)vmOption).get("value");
    } catch (Throwable t) {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢彼得,我想我希望有一种通用的命令行方法,而不是循环遍历每个选项。但你让我想到了 JMX,所以也许像 http://wiki.cyclopsgroup.org/jmxterm 这样的东西可能对我有用。 (2认同)