Как найти версию 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 unknownThe
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.versionJava 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