有没有办法显示正在运行的JVM中使用的标志?

时间:2013-02-01 12:47:54

标签: java jvm

虽然我们已经为应用程序显式设置了许多JVM标志,但是很难知道: 1.默认情况下,布尔标志已经打开(默认值在次要JDK / JRE更新之间更改) 一面旗帜否定了另一面 3.给定任意标志的默认值在您的特定系统上是什么(由Java人体工程学设置)

总结: 是否有类似于

的命令行工具
java -XX:+PrintFlagsFinal

,我可以检查已经运行的JVM的所有标志值吗?

3 个答案:

答案 0 :(得分:4)

对于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;
    }
}

答案 1 :(得分:1)

您正在寻找jinfo。它允许您从命令行查看和设置JVM标志。它是JVM众多广为人知的Tools and Utilities之一。

答案 2 :(得分:0)

此技术适用于任何运行本地或远程的Java应用程序。

  1. 启动您的Java应用程序
  2. 运行JDK中的JVisualVM(例如C:\ Program 文件\爪哇\ jdk1.8.0_05 \ BIN \ jvisualvm.exe)
  3. 当这个有用的工具开始时,查看运行java应用程序的列表 “本地”树节点。
  4. 双击树中的[您的应用程序](pid [n])
  5. 在右侧,将有选项卡中的检查内容 应用。在Overview选项卡的中间,您将看到JVM 申请的论据。
  6. 自JDK 6 Update 7以来,jvisualvm可以在任何JDK中找到.jvisualvm上的视频教程是here.