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

Java 有没有办法显示正在运行的JVM中使用的标志?,java,jvm,Java,Jvm,尽管我们已经为应用程序显式设置了许多JVM标志,但很难知道: 1.默认情况下,布尔标志已打开(在JDK/JRE小更新之间更改了默认值) 2.一个标志否定另一个标志 3.特定系统上给定任意标志的默认值是多少(由Java人机工程学设置) 总而言之: 是否有类似的命令行工具 java -XX:+PrintFlagsFinal ,在这里,我可以检查已经运行的JVM的所有标志值?以了解您可以使用的热点(从ehcache) 你在找我。它允许您从命令行查看和设置JVM标志。对于JVM来说,这是许多广为人知的

尽管我们已经为应用程序显式设置了许多JVM标志,但很难知道: 1.默认情况下,布尔标志已打开(在JDK/JRE小更新之间更改了默认值) 2.一个标志否定另一个标志 3.特定系统上给定任意标志的默认值是多少(由Java人机工程学设置)

总而言之: 是否有类似的命令行工具

java -XX:+PrintFlagsFinal
,在这里,我可以检查已经运行的JVM的所有标志值?

以了解您可以使用的热点(从ehcache)


你在找我。它允许您从命令行查看和设置JVM标志。对于JVM来说,这是许多广为人知的技术之一。

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

  • 启动java应用程序
  • 运行在JDK中找到的程序(例如C:\Program 文件\Java\jdk1.8.0\u 05\bin\jvisualvm.exe)
  • 当这个有用的工具启动时,请查看 “本地”树节点
  • 双击树中的[您的应用程序](pid[n])
  • 在右侧的选项卡中,将显示检查内容 应用在“概述”选项卡的中间,您将看到JVM。 应用程序的参数

  • jvisualvm可以在JDK 6更新7之后的任何JDK中找到。关于jvisualvm的视频教程是

    谢谢Peter,我想我希望使用一刀切的命令行方法,而不是循环使用每个选项。但你让我想到了JMX,所以也许类似的东西对我有用。嘿,Ryan,我刚试过jinfo。不幸的是,它只列出用户显式设置的标志。我感兴趣的是查看所有用户集和jvm集标志的值。那页真的很有用!
    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;
        }
    }