java - sistema - ¿Cómo encontrar la versión de JVM de un programa?
son los encargados de que los programas compilados en java corran en cualquier sistema operativo (10)
A continuación, el código java devuelve las versiones JVM
que están disponibles en su IDE actual.
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) {
// ...
}
salida:
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
Quiero escribir un archivo Java de muestra en el que deseo conocer la versión de JVM en la que se está ejecutando la clase. ¿Hay alguna manera?
Dependiendo de lo que uno necesite, las otras respuestas pueden ayudar.
En mi caso, no lo hicieron. Estaba buscando la información de la versión "totalmente calificada" de un IBM JDK.
Entonces, la respuesta "real" puede ser: simplemente descargue todas las propiedades del sistema y verifique si hay una que le proporcione lo que está buscando.
En mi caso; Descubrí que IBM JDK conoce una
Propiedad: java.fullversion
JRE 1.8.0 IBM J9 2.8 Linux amd64-64 Compressed References 20161013_322271 (JIT habilitado, AOT habilitado)
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
Ejemplos usando java.version
, java.specification.version
y java.runtime.version
: Obteniendo la versión de java en tiempo de ejecución .
La información sobre las versiones se almacena como propiedades de la clase del System
.
http://docs.oracle.com/javase/6/docs/api/java/lang/System.html#getProperties%28%29
Parece que java.specification.version
es el mejor para el trabajo.
EG de un applet en uno de mis sitios anteriores:
java.specification.version 1.6
java.version 1.6.0_23
java.vm.version 19.0-b09
java.runtime.version unknown
El valor unknown
para java.runtime.version
simplemente significa que el applet no es de confianza. Aquí está en la versión de confianza:
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
Simplemente llame,
System.out.println(System.getProperty("java.specification.version"));
System.out.println(System.getProperty("java.runtime.version"));
Ejemplo de salida:
9
9+176
Simplemente un caso de llamar a System.getProperty("java.version")
.
System.getProperty ("sun.arch.data.model");
Control Java de 32 bits y 64 bits
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);
Salida:
6
32
System.getProperty("java.version")
devuelve lo que necesita.
También puede usar JMX si lo desea:
ManagementFactory.getRuntimeMXBean().getVmVersion()
System.getProperty("java.version")
Aquí hay una lista de propiedades de sistema estándar, que incluyen:
-
java.vm.specification.version
Versión de especificación de la máquina virtual de Java -
java.vm.specification.vendor
especificación de máquina virtual Java -
java.vm.specification.name
Nombre de la especificación de la máquina virtual Java -
java.vm.version
Versión de implementación de Java Virtual Machine -
java.vm.vendor
Proveedor de implementación de máquina virtual Java -
java.vm.name
Nombre de implementación de la máquina virtual Java -
java.specification.version
Versión de especificación de Java Runtime Environment -
java.specification.vendor
especificación de Java Runtime Environment -
java.specification.name
Nombre de la especificación de Java Runtime Environment