如何从程序中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.version
的unknown
值只是表示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.version
, java.specification.version
和java.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