Comment trouver la version JVM à partir d'un programme?
Je veux écrire un exemple de fichier Java dans lequel je veux connaître la version JVM dans laquelle la classe est en cours d'exécution. Est-il possible?
10 answers
System.getProperty("java.version")
retourne ce dont vous avez besoin.
Vous pouvez également utiliser JMX si vous voulez:
ManagementFactory.getRuntimeMXBean().getVmVersion()
Il semble que le java.specification.version
soit le meilleur pour le travail.
Par exemple à partir d'une applet sur l'un de mes anciens sites:
java.specification.version 1.6
java.version 1.6.0_23
java.vm.version 19.0-b09
java.runtime.version unknown
La valeur unknown
pour java.runtime.version
signifie simplement que l'applet n'est pas approuvé. Le voici dans la version de confiance:
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")
Voici une liste des propriétés du système standard , y compris:
-
java.vm.specification.version
Version de spécification de machine virtuelle Java -
java.vm.specification.vendor
Fournisseur de spécifications de machine virtuelle Java -
java.vm.specification.name
Nom de spécification de machine virtuelle Java -
java.vm.version
Version d'implémentation de la machine virtuelle Java -
java.vm.vendor
Fournisseur d'implémentation de machine virtuelle Java -
java.vm.name
Nom de l'implémentation de la machine virtuelle Java -
java.specification.version
Java Version de spécification d'environnement d'exécution -
java.specification.vendor
Fournisseur de spécification d'environnement d'exécution Java -
java.specification.name
Nom de la spécification de l'environnement d'exécution Java
Simplement un cas d'appel System.getProperty("java.version")
.
Exemples utilisant java.version
, java.specification.version
et java.runtime.version
: Obtenir la version de java dans l'exécution .
Ci-dessous, le code java renvoie JVM
les versions disponibles dans votreE actuel
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) {
// ...
}
Sortie:
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
Selon ce dont on a besoin, les autres réponses peuvent aider.
Dans mon cas, ils ne l'ont pas fait. Je cherchais les informations de version "entièrement qualifiées" d'un JDK IBM.
Donc, la "vraie" réponse peut être: il suffit de vidertoutes les propriétés du système et de vérifier s'il y en a une qui vous donne ce que vous cherchez.
Dans mon cas; j'ai trouvé que le JDK IBM connaît un
Propriété: java.version complète
JRE 1.8.0 IBM J9 2.8 Linux amd64-64 compressé Références 20161013_322271 (JIT activé, AOT activé)
J9VM - R28_Java8_SR3_20161013_1635_B322271
JIT - tr.r14.Java.vert_20161011_125790
GC-R28_Java8_SR3_20161013_1635_B322271_CMPRSS J9CL-20161013_322271
Les informations sur les versions sont stockées en tant que propriétés de la classe System
.
Http://docs.oracle.com/javase/6/docs/api/java/lang/System.html#getProperties%28%29
Système.getProperty ("soleil.Arch.données.modèle");
Contrôle Java 32 bits et 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);
Sortie :
6
32
Il suffit d'appeler,
System.out.println(System.getProperty("java.specification.version"));
System.out.println(System.getProperty("java.runtime.version"));
Exemple de sortie:
9
9+176