Java Virtual Machine : machine virtuelle Java.

Besoin

Exécuter du code compilé Java (bytecode).

Analyse

Une JVM interprête le bytecode qu'elle lit et exécute les opérations machine correspondante. Elle dispose également d'un GC.

Une JVM est incluse dans chaque plate-forme Java (J2SE, J2ME, etc.).

Exemples

Des JVMs sont implémentées par :

  • JavaSoft (Sun)
    • pour J2SE : JVM
    • pour J2EE : JVM -server
    • pour J2ME : JVM ou KVM
  • IBM
    • pour J2SE
    • pour J2EE
    • pour pour J2ME : J9
  • HP
  • Microsoft
  • GNU

Notes

  • Le concept de VM n'a pas été inventé pour Java mais existait bien auparavant.
  • Le code source ayant produit le code compilé exécuté par la JVM n'était pas forcément du code source Java.
Release 1 Commentaire
Fix 0 1 2 3 4 5 6 7 8
Domaine Technologie Maintenance 2 0 1
EVM -Xtm D
-Xt D
JIT Non Oui 2ème génération disposant d'un compilateur "à la volée" (Just-In-Time compiler) capable de compiler en mémoire du bytecode Java de manière à de pas avoir à le ré-interpréter la prochaine fois (dans une bouche par exemple).
HotSpot JVM Client Non Oui 3ème génération capable d'identifier statistiquement des "points chauds" (hot spots) de l'application auquels il est plus intéressant d'appliquer la technique JIT (au lieu de perdre du temps à appliquer le JIT sur des portions "froides").
Serveur Non Oui
JVM -server Oui
Tas Taille maximum -mx Multiple de 1024, au moins 1 Mo, 2 Mo par défaut, par ex. : -Xms6291456
-Xms6144k
-Xms6m
...
Taille initiale -ms Multiple de 1024, au moins 2 Mo, 64 Mo par défaut. Par ex.: -Xms6291456
-Xms6144k
-Xms6m
...
GC -verbose:gc Oui
-XXloggc=filename Non Oui
-XX:+PrintGCDetails Non Oui
-XX:+PrintGCTimeStamps Non Oui
-XX:+PrintTenuringDistribution Oui
HotSpot -XX:NewSize Oui
-XX:MaxNewSize Oui
-XX:SurvivorRatio Oui
-XX:MaxTenuringThreshold=y Non Oui
-XX:TargetSurvivorRatio=z Non Oui
Parallel GC -XX:+UseParNewGC Non Oui
-XX:ParallelGCThreads=n Non Oui
-XX:+UseParallelGC Non Oui
Concurrent GC -XX:+UseConcMarkSweepGC Non Oui
-XX:CMSInitiatingOccupancyFraction=x Non Oui
Invocation dynamique invokedynamic

Voir