1

我希望通过 JMX远程确定特定进程正在运行的 Java 版本。具体来说,我想要像“1.6.0_26”这样的东西,它System.getProperty("java.version")会返回。

通过 RunTime MBean,我可以检查 VmName 和 VmVersion 属性,它们分别给出“Java HotSpot(TM) 64-Bit Server VM”和“20.1-b02”。我不确定“20.1-b02”来自哪里;有没有办法将它与“1.6.0_26”版本相匹配?

4

2 回答 2

3

java.lang.Runtimebean的一些提示:

  • 规格版本
  • LibraryPath/BootClassPath(最有可能在文件夹名称中)
  • 系统属性->java.runtime.version

编辑

java.lang.management.RuntimeMXBean.getSystemProperties()正如@Kent在代码中指出的那样,与 JConsole 等 JMX 客户端中的SystemProperties->相同。java.runtime.version

于 2013-01-09T21:08:55.520 回答
0

事实证明,旧版本的 JVM / JMX 为 specVersion 返回了错误的东西,因此使用@Kent 提供的技术效果更好:

        getLogger().finest("Checking JVM version");
    String specVersion = ManagementFactory.getRuntimeMXBean().getSpecVersion();
    getLogger().log(Level.FINEST, "Specification Version from JMX = ''{0}''", specVersion);

    // Because of bug in the above call, earlier versions of JMX reported the version of
    // JMX and not Java (so 1.6 reports 1.0 - replacing with the call below fixes this problem
    // and consistently returns the specification of the JVM that is being used.
    String javaVersion = ManagementFactory.getRuntimeMXBean().getSystemProperties().get("java.specification.version");
    getLogger().log(Level.FINEST, "java.specification.version found ''{0}''", javaVersion);
于 2013-08-11T18:45:14.140 回答