How to find the JVM version from a program?

JavaJvmVersion

Java Problem Overview


I want to write a sample Java file in which I want to know the JVM version in which the class is running. Is there a way?

Java Solutions


Solution 1 - Java

System.getProperty("java.version") returns what you need.

You can also use JMX if you want:

ManagementFactory.getRuntimeMXBean().getVmVersion()

Solution 2 - Java

Use:

System.getProperty("java.version");

Where java.version can be replaced with one of the many other system properties related to the current Java version. Here is a table of them:

 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

Sources:

  • Output of java -XshowSettings:all -version for a variety of JVM versions.
  • Java API Reference documentation for System.getProperties()

Solution 3 - Java

It seems the java.specification.version is the best one for the job.

E.G.

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

Solution 4 - Java

Simply a case of calling System.getProperty("java.version").

Solution 5 - Java

Just simply call,

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

Example output:

9
9+176

Solution 6 - Java

Below java code returns JVM versions which are available in your current IDE

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) {
	              // ...
	          }

output:

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

Solution 7 - Java

Depending on what one needs, the other answers can help.

In my case, they didn't. I was looking for the "fully qualified" version information of a IBM JDK.

So, the "real" answer can be: just dump all system properties and check if there is one that gives you what you are looking for.

In my case; I found that the IBM JDK knows a

Property: java.fullversion

> JRE 1.8.0 IBM J9 2.8 Linux amd64-64 Compressed References 20161013_322271 (JIT enabled, AOT enabled) > > 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

Solution 8 - Java

Since Java 9 we have a new static method: Runtime.version().

The object returned has interesting methods such as feature() or compareToIgnoreOptional() what might be easier to work with (e.g. Runtime.version().feature() >= 11).

Solution 9 - Java

Information about versions is stored as a properties of System class.

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

Solution 10 - Java

System.getProperty("sun.arch.data.model");

Java 32 Bit and 64 Bit Control

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

Output :

6
32

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionjava_geekView Question on Stackoverflow
Solution 1 - JavaAlexRView Answer on Stackoverflow
Solution 2 - JavaSean Patrick FloydView Answer on Stackoverflow
Solution 3 - JavaAndrew ThompsonView Answer on Stackoverflow
Solution 4 - JavaFinbarrView Answer on Stackoverflow
Solution 5 - JavasnrView Answer on Stackoverflow
Solution 6 - Javauser6166867View Answer on Stackoverflow
Solution 7 - JavaGhostCatView Answer on Stackoverflow
Solution 8 - JavaAdam KotwasinskiView Answer on Stackoverflow
Solution 9 - JavaAbbathView Answer on Stackoverflow
Solution 10 - Javaumut.bayramView Answer on Stackoverflow