我想编写一个示例 Java 文件,其中我想知道类在其中运行的 JVM 版本。有办法吗?
只是调用 System.getProperty("java.version")的一种情况。
System.getProperty("java.version")
用途:
System.getProperty("java.version");
其中 java.version可以替换为与当前 Java 版本相关的许多其他系统属性之一。下面是他们的一张表:
java.version
Property Value (OpenJDK 12) Value (Oracle JRE 8u201) Value (Sun JRE 5u22) Description ------------------------------- ----------------------------------------- --------------------------------------- ---------------------------------------------------- --------------------------------------------------------------------------------------------------------------- java.version "12" "1.8.0_201" "1.5.0_22" Java Runtime Environment version, which may be interpreted as a Runtime.Version java.version.date "2019-03-19" null null Java Runtime Environment version date, in ISO-8601 YYYY-MM-DD format, which may be interpreted as a LocalDate java.vendor "Oracle Corporation" "Oracle Corporation" "Sun Microsystems Inc." Java Runtime Environment vendor java.vendor.version null null null Java vendor version java.vendor.url "https://java.oracle.com/" "http://java.oracle.com/" "http://java.sun.com/" Java vendor URL java.vendor.url.bug "https://bugreport.java.com/bugreport/" "http://bugreport.sun.com/bugreport/" "http://java.sun.com/cgi-bin/bugreport.cgi" Undocumented java.specification.name "Java Platform API Specification" "Java Platform API Specification" "Java Platform API Specification" Java Runtime Environment specification name java.specification.vendor "Oracle Corporation" "Oracle Corporation" "Sun Microsystems Inc." Java Runtime Environment specification vendor java.specification.version "12" "1.8" "1.5" Java Runtime Environment specification version, whose value is the feature element of the runtime version java.vm.name "OpenJDK 64-Bit Server VM" "Java HotSpot(TM) 64-Bit Server VM" "Java HotSpot(TM) 64-Bit Server VM" Java Virtual Machine implementation name java.vm.vendor "Oracle Corporation" "Oracle Corporation" "Sun Microsystems Inc." Java Virtual Machine implementation vendor java.vm.version "12+33" "25.201-b09" "1.5.0_22-b03" Java Virtual Machine implementation version which may be interpreted as a Runtime.Version java.vm.info "mixed mode, sharing" "mixed mode" "mixed mode" Undocumented java.vm.specification.name "Java Virtual Machine Specification" "Java Virtual Machine Specification" "Java Virtual Machine Specification" Java Virtual Machine specification name java.vm.specification.vendor "Oracle Corporation" "Oracle Corporation" "Sun Microsystems Inc." Java Virtual Machine specification vendor java.vm.specification.version "12" "1.8" "1.0" Java Virtual Machine specification version, whose value is the feature element of the runtime version java.runtime.name "OpenJDK Runtime Environment" "Java(TM) SE Runtime Environment" "Java(TM) 2 Runtime Environment, Standard Edition" Undocumented java.runtime.version "12+33" "1.8.0_201-b09" "1.5.0_22-b03" Undocumented java.class.version "56.0" "52.0" "49.0" Java class format version number jdk.debug "release" null null Undocumented sun.java.launcher "SUN_STANDARD" "SUN_STANDARD" "SUN_STANDARD" Undocumented sun.management.compiler "HotSpot 64-Bit Tiered Compilers" "HotSpot 64-Bit Tiered Compilers" "HotSpot 64-Bit Server Compiler" Undocumented
资料来源:
java -XshowSettings:all -version
System.getProperties()
System.getProperty("java.version")返回您需要的内容。
如果需要,还可以使用 JMX:
ManagementFactory.getRuntimeMXBean().getVmVersion()
看来 java.specification.version是最适合这项工作的。
java.specification.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类的属性存储。
System
Http://docs.oracle.com/javase/6/docs/api/java/lang/system.html#getproperties%28%29
下面的 Java 代码返回当前 IDE 中可用的 JVM版本
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
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
根据一个人的需要,其他的答案可能会有帮助。
在我的案例中,他们没有,我正在寻找 IBMJDK 的“完全限定”版本信息。
因此,“真正的”答案可以是: 只转储 所有系统属性,并检查是否有一个您正在寻找的属性。
在我的例子中,我发现 IBMJDK 知道一个
产权: Java.fullversion
JRE 1.8.0 IBM J92.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
JRE 1.8.0 IBM J92.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
从 Java9开始,我们有了一个新的静态方法: Version ()。
返回的对象有一些有趣的方法,比如 Feature ()或 compareToIgnoreOptions () ,这些方法可能更容易使用(例如 Runtime.version().feature() >= 11)。
Runtime.version().feature() >= 11