TUTORIEL JAVA 
Expliquez-moi... le fonctionnement de la machine virtuelle Java
La JVM émule un environnement d'exécution complet et standard, afin d'assurer la portabilité des programmes. Décomposition de ses éléments-clefs. (25/07/2005)
Un programme Java n'est jamais réellement lancé par le système d'exploitation, mais se voit cantonné à un environnement virtuel créé par la machine virtuelle Java (JVM, pour Java Virtual Machine). Celle-ci est le coeur même de la plate-forme Java et de son langage. C'est elle qui fait le lien entre le code compilé (bytecode) et la machine même - assurant de fait la portabilité des applications Java. Chaque système d'exploitation majeur dispose de sa propre version de la JVM, et toutes fonctionnent selon les mêmes principes.

La JVM est un programme qui émule au sein du système d'exploitation un environnement standardisé, isolé et sécurisé. Dans cet environnement protégé, le programme se lance dans un environnement natif, qui se charge de "convertir" ses requêtes au système. La JVM fait la liaison entre le code Java compilé et le système d'exploitation (voire les composants même de la machine), créant une couche d'abstraction identique à celle proposée par la même implémentation de la JVM sur d'autres systèmes.

Bytecode
En théorie, la JVM n'a de lien avec Java que le nom : la machine virtuelle elle-même se soucie peu du langage Java, et tout langage capable de générer du bytecode compatible devrait être en mesure de l'exploiter. Le bytecode résulte de la compilation du code source Java (ou autre, donc) en un fichier .class, qui contient les instructions pour la machine virtuelle, ainsi que d'autres informations comme une table de symboles (structure de données).

Le bytecode est donc un code intermédiaire, et le résultat du compilateur javac. Java n'est pas le premier langage a profiter de cette idée, Smalltalk, Ocaml et d'autres langages historiques peuvent en générer. Perl, PHP et Python y font également appel, tandis que la plate-forme .NET, de son côté, en a fait la base de son indépendance, tant côté système que langage. De nombreux langages sont en mesure d'être compilé pour la JVM.

L'environnement virtuel
Le programme en charge de la JVM créé donc un environnement d'execution complet, prenant en charge la plupart des fonctionnalités d'un système d'exploitation. La complexité de cette émulation est répartie dans quatre unités liées : les registres (registers), la pile (stack), le tas (heap) et la zone de méthodes.

Les registres
La JVM dispose de quatre registres : le premier est un compteur de programme (pc register) servant à gérer la mémoire, plus spécifiquement l'emplacement où les instructions devront être/sont lancées. Cet emplacement correspond au "thread" en cours.

Les trois autres registres servent à gérer la pile. Chacun pointe vers le bloc de données utilisé par la méthode en cours d'exécution. Ce bloc est appelé "stack frame", et correspond à une zone de la mémoire occupée par le stack.
 - registre "optop" : pointe vers le haut de la pile d'opérandes,
 - registre "frame" : pointe vers l'exécution en cours,
 - registre "vars" : pointe vers la première variable locale de l'exécution en cours.

La pile
La pile/stack est donc l'endroit où agissent les instruction bytecode : passage de paramètre et récupération de résultat, vérification d'état... Chacun invocation de méthode dispose de sa propre stack frame, vers laquelle pointent les registres sus-cités.

  Forum

Réagissez dans les forums de JDN Développeurs

Le tas
Le tas correspond à la zone de mémoire où prolifèrent les objets Java (instanciés à partir du mot-clef new). C'est aussi ici que sévit le terrible ramasse-miettes, dont nous avons déjà parlé (lire notre article du 26/05/05).

La zone de méthode
Enfin, la zone de méthodes héberge les bytescodes eux-mêmes. Elle dispose de deux sous-zones : méthode et réserve constante (constant pool).

Ces quatre unités travaillent de concert pour offrir aux applications Java un environnement sain dans lequel s'exécuter.
 
Xavier Borderie, JDN Développeurs
 
Accueil | Haut de page
 
 





Quand achetez-vous le plus en ligne ?
Du lundi au vendredi
Le samedi
Le dimanche

Tous les sondages