プログラムからJVMバージョンを見つける方法は?


116

クラスが実行されているJVMのバージョンを知りたいサンプルJavaファイルを書きたいのですが。方法はありますか?


3
いくつかのメモ。システムプロパティはそのためのものですが、これは特権操作であり、アプレット/ webstart /サンドボックス化されたコードはそれを実行できない(SecurityExceptionを取得する)ことに注意してください。通常は、同様の方法で実行しますAccessController.doPrivileged(new PrivilegedAction<String>(...));
bestsss

3
@bestsss一部のプロパティはjava.specification.version、信頼できるアプレットでのみ使用できますが、、java.versionjava.vm.versionはすべてサンドボックスアプレットで使用できます1.6.0_23。少なくとも、の時点で使用できました。詳細については、私の回答を参照しください。
Andrew Thompson

また、うまくいくかもしれません:java -version:)
badp

回答:


127

System.getProperty("java.version") 必要なものを返します。

必要に応じてJMXを使用することもできます。

ManagementFactory.getRuntimeMXBean().getVmVersion()


6
そのJMX呼び出しは、「java.version」ではなく、「java.vm.version」に相当するものを返します。これらは通常(必ずというわけではありませんが)同じです。
Alex Miller

2
ManagementFactory.getRuntimeMXBean()。getSpecVersion()の方が正確な場合があります。
auntyellow 2014

@AlexMillerはいつ違いますか?面白いですね。
DavidS 2015

1
実際、同じではないと思います。java.vm.versionは「25.0-b70」のようなjvmバージョン番号ですが、java.versionは「1.8.0」を表示するのに慣れている通常のJava言語バージョンです。
Alex Miller

3
Java 9がこの文字列からの戻り値を変更することは注目に値します。
AlBlue 2016

54

それjava.specification.versionは仕事に最適なもののようです。

例えば

java.specification.version  1.6
java.version    1.6.0_23
java.vm.version 19.0-b09
java.runtime.version    1.6.0_23-b05

1
java.vm.versionあるOpenJDKの-11-ヘッドレスでヌル
User8461

@ User8461たぶん、あなたはオープンなJDKを監督する誰とでもバグレポートを提起するべきでしょう。正直に言うと、その値を見つけることにあまり意味がありません。ここでは、現在、25.45-b02何も意味しません(有用な情報を提供しません)。
Andrew Thompson

53

使用する:

System.getProperty("java.version");

where java.versionは、現在のJavaバージョンに関連する他の多くのシステムプロパティのいずれかに置き換えることができます。ここにそれらの表があります:

 Property                        Value (OpenJDK 12)                        Value (Oracle JRE 8u201)                Value (Sun JRE 5u22)                                 Description
------------------------------- ----------------------------------------- --------------------------------------- ---------------------------------------------------- ---------------------------------------------------------------------------------------------------------------
 java.version                    "12"                                      "1.8.0_201"                             "1.5.0_22"                                           Java Runtime Environment version, which may be interpreted as a Runtime.Version
 java.version.date               "2019-03-19"                              null                                    null                                                 Java Runtime Environment version date, in ISO-8601 YYYY-MM-DD format, which may be interpreted as a LocalDate
 java.vendor                     "Oracle Corporation"                      "Oracle Corporation"                    "Sun Microsystems Inc."                              Java Runtime Environment vendor
 java.vendor.version             null                                      null                                    null                                                 Java vendor version
 java.vendor.url                 "https://java.oracle.com/"                "http://java.oracle.com/"               "http://java.sun.com/"                               Java vendor URL
 java.vendor.url.bug             "https://bugreport.java.com/bugreport/"   "http://bugreport.sun.com/bugreport/"   "http://java.sun.com/cgi-bin/bugreport.cgi"          Undocumented
 java.specification.name         "Java Platform API Specification"         "Java Platform API Specification"       "Java Platform API Specification"                    Java Runtime Environment specification name
 java.specification.vendor       "Oracle Corporation"                      "Oracle Corporation"                    "Sun Microsystems Inc."                              Java Runtime Environment specification vendor
 java.specification.version      "12"                                      "1.8"                                   "1.5"                                                Java Runtime Environment specification version, whose value is the feature element of the runtime version
 java.vm.name                    "OpenJDK 64-Bit Server VM"                "Java HotSpot(TM) 64-Bit Server VM"     "Java HotSpot(TM) 64-Bit Server VM"                  Java Virtual Machine implementation name
 java.vm.vendor                  "Oracle Corporation"                      "Oracle Corporation"                    "Sun Microsystems Inc."                              Java Virtual Machine implementation vendor
 java.vm.version                 "12+33"                                   "25.201-b09"                            "1.5.0_22-b03"                                       Java Virtual Machine implementation version which may be interpreted as a Runtime.Version
 java.vm.info                    "mixed mode, sharing"                     "mixed mode"                            "mixed mode"                                         Undocumented
 java.vm.specification.name      "Java Virtual Machine Specification"      "Java Virtual Machine Specification"    "Java Virtual Machine Specification"                 Java Virtual Machine specification name
 java.vm.specification.vendor    "Oracle Corporation"                      "Oracle Corporation"                    "Sun Microsystems Inc."                              Java Virtual Machine specification vendor
 java.vm.specification.version   "12"                                      "1.8"                                   "1.0"                                                Java Virtual Machine specification version, whose value is the feature element of the runtime version
 java.runtime.name               "OpenJDK Runtime Environment"             "Java(TM) SE Runtime Environment"       "Java(TM) 2 Runtime Environment, Standard Edition"   Undocumented
 java.runtime.version            "12+33"                                   "1.8.0_201-b09"                         "1.5.0_22-b03"                                       Undocumented
 java.class.version              "56.0"                                    "52.0"                                  "49.0"                                               Java class format version number
 jdk.debug                       "release"                                 null                                    null                                                 Undocumented
 sun.java.launcher               "SUN_STANDARD"                            "SUN_STANDARD"                          "SUN_STANDARD"                                       Undocumented
 sun.management.compiler         "HotSpot 64-Bit Tiered Compilers"         "HotSpot 64-Bit Tiered Compilers"       "HotSpot 64-Bit Server Compiler"                     Undocumented

出典:

  • java -XshowSettings:all -versionさまざまなJVMバージョンの出力。
  • のJava APIリファレンスドキュメント System.getProperties()



1

以下のJavaコードはJVM、現在のIDEで使用可能なバージョンを返します

List<VirtualMachineDescriptor> descriptors = VirtualMachine.list();
          for (VirtualMachineDescriptor descriptor : descriptors) {
              System.out.println("Found JVM: " + descriptor.displayName());
              try {
                  VirtualMachine vm = VirtualMachine.attach(descriptor);
                  String version = vm.getSystemProperties().getProperty("java.runtime.version");
                  System.out.println("   Runtime Version: " + version);

                   String connectorAddress = vm.getAgentProperties().getProperty("com.sun.management.jmxremote.localConnectorAddress");
                  if (connectorAddress == null) {

                      connectorAddress = vm.getAgentProperties().getProperty("com.sun.management.jmxremote.localConnectorAddress");
                  }

                  JMXServiceURL url = new JMXServiceURL(connectorAddress);
                  JMXConnector connector = JMXConnectorFactory.connect(url);
                  MBeanServerConnection mbs = connector.getMBeanServerConnection();

                  ObjectName threadName = new ObjectName(ManagementFactory.THREAD_MXBEAN_NAME);
                  Integer threadCount = (Integer)mbs.getAttribute(threadName, "ThreadCount");
                  System.out.println("    Thread count: " + threadCount);
              }
              catch (Exception e) {
                  // ...
              }

出力:

Found JVM: /home/.../STS IDE/sts-bundle/sts-3.7.2.RELEASE//plugins/org.eclipse.equinox.launcher_1.3.100.v20150511-1540.jar -os linux -ws gtk -arch x86_64 -showsplash -launcher /home/.../STS IDE/sts-bundle/sts-3.7.2.RELEASE/STS -name STS --launcher.library /home/.../STS IDE/sts-bundle/sts-3.7.2.RELEASE//plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.300.v20150602-1417/eclipse_1612.so -startup /home/.../STS IDE/sts-bundle/sts-3.7.2.RELEASE//plugins/org.eclipse.equinox.launcher_1.3.100.v20150511-1540.jar --launcher.overrideVmargs -exitdata 1ad000f -product org.springsource.sts.ide -vm /usr/bin/java -vmargs -Dosgi.requiredJavaVersion=1.7 -Xms40m -XX:MaxPermSize=256m -Xverify:none -Xmx1200m -jar /home/.../STS IDE/sts-bundle/sts-3.7.2.RELEASE//plugins/org.eclipse.equinox.launcher_1.3.100.v20150511-1540.jar
   Runtime Version: 1.8.0_91-b14
Found JVM: com.intellij.idea.Main
   Runtime Version: 1.8.0_91-b14
Found JVM: Test
   Runtime Version: 1.7.0_80-b15

1

必要に応じて、他の回答が役立ちます。

私の場合、彼らはしませんでした。IBM JDKの「完全修飾」バージョン情報を探していました。

したがって、「実際の」答えは次のとおりです。すべてのシステムプロパティをダンプ、探しているものを提供するものがあるかどうかを確認します。

私の場合; IBM JDKは、

プロパティ:java.fullversion

JRE 1.8.0 IBM J9 2.8 Linux amd64-64 Compressed References 20161013_322271(JIT対応、AOT対応)

J9VM-R28_Java8_SR3_20161013_1635_B322271

JIT-tr.r14.java.green_20161011_125790

GC-R28_Java8_SR3_20161013_1635_B322271_CMPRSS J9CL-20161013_322271


1

ただ電話するだけで

System.out.println(System.getProperty("java.specification.version"));
System.out.println(System.getProperty("java.runtime.version"));

出力例:

9
9+176


0

System.getProperty( "sun.arch.data.model");

Java 32ビットおよび64ビットコントロール

    Integer vers = Integer.parseInt(System.getProperty("java.version").split("\\.")[1]);
    String bitMode = System.getProperty("sun.arch.data.model").toString();
    System.out.println(vers);
    System.out.println(bitMode);

出力:

6
32
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.