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

編集

@Kent がコードで指摘したように、JConsole のような JMX クライアントでは->java.lang.management.RuntimeMXBean.getSystemProperties()と同じです。SystemPropertiesjava.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 に答える