Bagaimana cara mengetahui versi JVM dari suatu program?

116

Saya ingin menulis contoh file Java di mana saya ingin mengetahui versi JVM yang digunakan kelas tersebut. Apakah ada jalan

java_geek
sumber
3
beberapa catatan. Properti sistem dimaksudkan untuk itu tetapi perlu diingat bahwa ini adalah operasi dengan hak istimewa dan kode kotak applet / webstart / pasir tidak akan dapat menjalankannya (mendapatkan SecurityException). Biasanya Anda ingin menjalankannya dengan cara yang samaAccessController.doPrivileged(new PrivilegedAction<String>(...));
bestsss
3
@bestsss Sementara beberapa sifat yang hanya tersedia untuk applet yang dipercaya: java.specification.version, java.version& java.vm.versionsemua tersedia untuk applet pasir-kotak, atau setidaknya mereka pada 1.6.0_23. Lihat jawaban saya untuk lebih jelasnya.
Andrew Thompson
Juga hal yang mungkin berhasil: java -version:)
badp
2
Kemungkinan duplikat dari Mendapatkan versi Java saat runtime
BuZZ-dEE

Jawaban:

127

System.getProperty("java.version") mengembalikan apa yang Anda butuhkan.

Anda juga dapat menggunakan JMX jika Anda ingin:

ManagementFactory.getRuntimeMXBean().getVmVersion()

AlexR
sumber
6
Panggilan JMX itu mengembalikan yang setara dengan "java.vm.version", bukan "java.version". Ini biasanya (tetapi tidak harus) sama.
Alex Miller
2
ManagementFactory.getRuntimeMXBean (). GetSpecVersion () mungkin lebih akurat.
bibi kuning
Kapan mereka berbeda, @AlexMiller? Kedengarannya menarik.
DavidS
1
Sebenarnya, menurutku mereka tidak sama. Java.vm.version adalah nomor versi jvm, seperti "25.0-b70" sedangkan java.version adalah versi bahasa java normal yang biasa Anda lihat "1.8.0".
Alex Miller
3
Perlu dicatat bahwa Java 9 akan mengubah nilai yang dikembalikan dari string ini.
AlBlue
54

Sepertinya yang java.specification.versionterbaik untuk pekerjaan itu.

MISALNYA

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
Andrew Thompson
sumber
1
java.vm.versionadalah null di openjdk-11-headless
User8461
@ User8461 Mungkin Anda harus melaporkan bug dengan siapa pun yang mengawasi JDK terbuka, Sejujurnya saya tidak melihat banyak gunanya mencari tahu nilai itu. Ini dia saat ini 25.45-b02.. yang tidak berarti apa-apa (tidak memberikan informasi berguna) bagi saya.
Andrew Thompson
53

Menggunakan:

System.getProperty("java.version");

Di mana java.versiondapat diganti dengan salah satu dari banyak properti sistem lain yang terkait dengan versi Java saat ini. Berikut adalah tabelnya:

 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

Sumber:

  • Keluaran java -XshowSettings:all -versionuntuk berbagai versi JVM.
  • Dokumentasi Referensi API Java untuk System.getProperties()
Sean Patrick Floyd
sumber
12

Hanya kasus menelepon System.getProperty("java.version").

Finbarr
sumber
1

Di bawah kode java mengembalikan JVMversi yang tersedia di IDE Anda saat ini

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) {
                  // ...
              }

keluaran:

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

sumber
1

Tergantung pada apa yang dibutuhkan, jawaban yang lain dapat membantu.

Dalam kasus saya, mereka tidak melakukannya. Saya sedang mencari informasi versi yang "memenuhi syarat" dari IBM JDK.

Jadi, jawaban "sebenarnya" bisa jadi: buang saja semua properti sistem dan periksa apakah ada yang memberi Anda apa yang Anda cari.

Dalam kasus saya; Saya menemukan bahwa IBM JDK mengetahui a

Properti: java.fullversion

JRE 1.8.0 IBM J9 2.8 Linux amd64-64 Referensi Terkompresi 20161013_322271 (JIT diaktifkan, AOT diaktifkan)

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

GhostCat
sumber
1

Cukup panggil saja,

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

Contoh keluaran:

9
9+176
snr
sumber
0

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

Kontrol Java 32 Bit dan 64 Bit

    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);

Keluaran:

6
32
umut.bayram
sumber