Java 如何从程序中找到JVM版本?

Java 如何从程序中找到JVM版本?,java,jvm,version,Java,Jvm,Version,我想编写一个示例Java文件,在其中我想知道类运行的JVM版本。有办法吗?只需调用System.getProperty(“java.version”)使用: System.getProperty(“java.version”); 其中,java.version可以替换为与当前java版本相关的许多其他系统属性之一。以下是一张表格: 属性值(OpenJDK 12)值(Oracle JRE 8u201)值(Sun JRE 5u22)说明 ------------------------------

我想编写一个示例Java文件,在其中我想知道类运行的JVM版本。有办法吗?

只需调用
System.getProperty(“java.version”)
使用:

System.getProperty(“java.version”);
其中,
java.version
可以替换为与当前java版本相关的许多其他系统属性之一。以下是一张表格:

属性值(OpenJDK 12)值(Oracle JRE 8u201)值(Sun JRE 5u22)说明
------------------------------- ----------------------------------------- --------------------------------------- ---------------------------------------------------- ---------------------------------------------------------------------------------------------------------------
java.version“12”1.8.0_201“1.5.0_22”java运行时环境版本,可解释为Runtime.version
java.version.date“2019-03-19”null java运行时环境版本日期,ISO-8601 YYYY-MM-DD格式,可解释为本地日期
java.vendor“Oracle Corporation”“Oracle Corporation”“Sun Microsystems Inc.”java运行时环境供应商
java.vendor.version null java供应商版本
java.vendor.url“https://java.oracle.com/"                "http://java.oracle.com/"               "http://java.sun.com/“Java供应商URL
java.vendor.url.bug“https://bugreport.java.com/bugreport/"   "http://bugreport.sun.com/bugreport/"   "http://java.sun.com/cgi-bin/bugreport.cgi“无证件
java.specification.name“java平台API规范”“java平台API规范”“java平台API规范”java运行时环境规范名称
java.specification.vendor“Oracle Corporation”“Oracle Corporation”“Sun Microsystems Inc.”java运行时环境规范供应商
java.specification.version“12”“1.8”“1.5”java运行时环境规范版本,其值是运行时版本的特征元素
java.vm.name“OpenJDK 64位服务器vm”“java热点(TM)64位服务器vm”“java热点(TM)64位服务器vm”java虚拟机实现名称
java.vm.vendor“Oracle Corporation”“Oracle Corporation”“Sun Microsystems Inc.”java虚拟机实施供应商
java.vm.version“12+33”“25.201-b09”“1.5.0_22-b03”java虚拟机实现版本,可解释为运行时版本
java.vm.info“混合模式,共享”“混合模式”“混合模式”未记录
java.vm.specification.name“java虚拟机规范”“java虚拟机规范”“java虚拟机规范”java虚拟机规范名称
java.vm.specification.vendor“Oracle Corporation”“Oracle Corporation”“Sun Microsystems Inc.”java虚拟机规范供应商
java.vm.specification.version“12”“1.8”“1.0”java虚拟机规范版本,其值是运行时版本的功能元素
java.runtime.name“OpenJDK运行时环境”“java(TM)SE运行时环境”“java(TM)2运行时环境,标准版”未记录
java.runtime.version“12+33”“1.8.0_201-b09”“1.5.0_22-b03”未记录
java.class.version“56.0”“52.0”“49.0”java类格式版本号
jdk.debug“release”null未记录
sun.java.launcher“sun_标准”“sun_标准”“sun_标准”未记录
sun.management.compiler“热点64位分层编译器”“热点64位分层编译器”“热点64位服务器编译器”未记录
资料来源:

  • 各种JVM版本的
    java-XshowSettings:all-version
    输出
  • Java API的参考文档
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    1.6.0_23-b05
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
    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
System.out.println(System.getProperty("java.specification.version"));
System.out.println(System.getProperty("java.runtime.version"));
9
9+176