Как найти версию JVM из программы?


Я хочу написать пример Java-файла, в котором я хочу знать версию JVM, в которой работает класс. Есть ли способ?

10 87

10 ответов:

System.getProperty("java.version") возвращает то, что вам нужно.

вы также можете использовать JMX, если вы хотите:

ManagementFactory.getRuntimeMXBean().getVmVersion()

кажется java.specification.version является лучшим для работы.

например, из апплета на одном из моих бывших сайтов:

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

The unknown значение java.runtime.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
System.getProperty("java.version")

вот список стандартных Свойства Системы, в том числе:

  • java.vm.specification.version версия спецификации виртуальной машины Java
  • java.vm.specification.vendor поставщик спецификации виртуальной машины Java
  • java.vm.specification.name имя спецификации виртуальной машины Java
  • java.vm.version версия реализации виртуальной машины Java
  • java.vm.vendor поставщик реализации виртуальной машины Java
  • java.vm.name Имя реализации виртуальной машины Java
  • java.specification.version Java Runtime Environment specification version
  • java.specification.vendor поставщик спецификации среды выполнения Java
  • java.specification.name имя спецификации среды выполнения Java

просто случай вызова System.getProperty("java.version").

примеры, используя java.version,java.specification.version и java.runtime.version: получение версии java во время выполнения.

ниже 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

в зависимости от того, что нужно, другие ответы могут помочь.

в моем случае, они не. Я искал "полный" версии IBM в версии JDK.

Итак, "реальный" ответ может быть: просто свалка все свойства системы и проверьте, есть ли тот, который дает вам то, что вы ищете.

в моем случае; я обнаружил, что IBM JDK знает a

свойства: java.fullversion

JRE 1.8.0 IBM J9 2.8 Linux amd64-64 сжатые ссылки 20161013_322271 (JIT включен, AOT включен)

J9VM-R28_Java8_SR3_20161013_1635_B322271

JIT-tr.r14.Ява.green_20161011_125790

GC-R28_Java8_SR3_20161013_1635_B322271_cmprss J9CL-20161013_322271

информация о версиях хранится как свойства System класса.

http://docs.oracle.com/javase/6/docs/api/java/lang/System.html#getProperties%28%29

просто позвоните,

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

пример:

9
9+176