如何从程序中findJVM版本?

我想写一个示例Java文件,我想知道该类正在运行的JVM版本。 有没有办法?

System.getProperty("java.version")返回你所需要的。

如果需要,您也可以使用JMX:

ManagementFactory.getRuntimeMXBean().getVmVersion()

java.specification.version似乎是最好的工作。

从我以前的网站的一个小程序的EG:

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

java.runtime.versionunknown值只是表示applet不可信。 这是在可信版本:

 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运行时环境规范版本
  • java.specification.vendor Java运行时环境规范供应商
  • java.specification.name Java运行时环境规范名称

只是调用System.getProperty("java.version")一个例子。

使用java.versionjava.specification.versionjava.runtime.version : 在运行时获取Java版本 。

关于版本的信息被存储为System类的一个属性。

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

下面的java代码返回当前IDE中可用的JVM版本

 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 

System.getProperty( “sun.arch.data.model”);

Java 32位和64位控制

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

输出:

 6 32 

根据需要,其他答案可以帮助。

就我而言,他们没有。 我正在查找IBM JDK的“完全限定”版本信息。

所以,“真正的”答案可以是:只转储所有的系统属性,并检查是否有一个给你你正在寻找的东西。

在我的情况下, 我发现IBM JDK知道一个

属性: 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.java.green_20161011_125790

GC – R28_Java8_SR3_20161013_1635_B322271_CMPRSS J9CL – 20161013_322271

只需拨打电话,

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

示例输出:

 9 9+176