Bir programdan JVM sürümünü nasıl bulabilirim?


116

Sınıfın çalıştığı JVM sürümünü öğrenmek istediğim örnek bir Java dosyası yazmak istiyorum. Bir yolu var mı?


3
birkaç not. Sistem özellikleri bunun içindir, ancak bunun ayrıcalıklı bir işlem olduğunu ve applet'ler / webstart / sand kutulu kodun bunu yürütemeyeceğini unutmayın (SecurityException). Normalde benzer şekilde çalıştırmak istersinizAccessController.doPrivileged(new PrivilegedAction<String>(...));
bestsss

3
Bazı özellikler güvenilen uygulamaları için kullanılabilir olmakla birlikte @bestsss: java.specification.version, java.version& java.vm.versionbir kum kutulu uygulaması için tüm mevcuttur, ya da en azından onlar itibariyle idi 1.6.0_23. Bkz Cevabımı fazla ayrıntı için.
Andrew Thompson

Ayrıca işe yarayabilecek bir şey: java -version:)
badp

Yanıtlar:


127

System.getProperty("java.version") ihtiyacınız olanı verir.

İsterseniz JMX'i de kullanabilirsiniz:

ManagementFactory.getRuntimeMXBean().getVmVersion()


6
Bu JMX çağrısı, "java.version" değil, "java.vm.version" eşdeğerini döndürür. Bunlar genellikle (ancak zorunlu değildir) aynıdır.
Alex Miller

2
ManagementFactory.getRuntimeMXBean (). GetSpecVersion () daha doğru olabilir.
auntyellow

Ne zaman farklılar @AlexMiller? Bu ilginç geliyor.
DavidS

1
Aslında, onlar bile geldin değil aynı. Java.vm.version jvm sürüm numarasıdır, "25.0-b70" gibi bir şey, java.version ise "1.8.0" görmeye alışkın olduğunuz normal java dili sürümüdür.
Alex Miller

3
Java 9'un bu dizeden döndürülen değeri değiştireceğini belirtmek gerekir.
AlBlue

54

Görünüşe göre java.specification.versioniş için en iyisi bu.

ÖRNEĞİN

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.versionopenjdk-11-headless içinde null
User8461

@ User8461 Belki de açık JDK'yı denetleyen kişilere bir hata raporu sunmalısınız, Dürüst olmak gerekirse, bu değeri bulmanın pek bir sebebini görmedim. İşte şu anda 25.45-b02.. bu benim için hiçbir şey ifade etmiyor (yararlı bilgi sağlamıyor).
Andrew Thompson

53

kullanın:

System.getProperty("java.version");

java.versionMevcut Java sürümüyle ilgili diğer birçok sistem özelliğinden biriyle nerede değiştirilebilir. İşte bunların bir tablosu:

 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

Kaynaklar:

  • Çıktı java -XshowSettings:all -version JVM sürümleri çeşitli.
  • Java API Başvurusu belgeleri System.getProperties()

12

Basitçe bir arama durumu System.getProperty("java.version").



1

Java kodunun altında JVM, mevcut IDE'nizde bulunan sürümleri döndürür

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

çıktı:

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

Neye ihtiyaç duyduğuna bağlı olarak, diğer cevaplar yardımcı olabilir.

Benim durumumda yapmadılar. Bir IBM JDK'nin "tam nitelikli" sürüm bilgilerini arıyordum.

Yani, "gerçek" cevap şu olabilir: tüm sistem özelliklerini boşaltın ve aradığınızı size veren bir tane olup olmadığını kontrol edin.

Benim durumumda; IBM JDK'nın bir

Özellik: java.fullversion

JRE 1.8.0 IBM J9 2.8 Linux amd64-64 Sıkıştırılmış Referanslar 20161013_322271 (JIT etkin, AOT etkin)

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

Sadece ara,

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

Örnek çıktı:

9
9+176


0

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

Java 32 Bit ve 64 Bit Kontrolü

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

Çıktı :

6
32
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.