Как найти версию JVM из программы?
Я хочу написать пример Java-файла, в котором я хочу знать версию JVM, в которой работает класс. Есть ли способ?
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
версия спецификации виртуальной машины Javajava.vm.specification.vendor
поставщик спецификации виртуальной машины Javajava.vm.specification.name
имя спецификации виртуальной машины Javajava.vm.version
версия реализации виртуальной машины Javajava.vm.vendor
поставщик реализации виртуальной машины Javajava.vm.name
Имя реализации виртуальной машины Javajava.specification.version
Java Runtime Environment specification versionjava.specification.vendor
поставщик спецификации среды выполнения Javajava.specification.name
имя спецификации среды выполнения Java
примеры, используя
java.version
,java.specification.version
иjava.runtime.version
: получение версии java во время выполнения.
ниже java код возвращает
JVM
версии, которые доступны в вашей текущей IDEList<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