1.3.2 Machine Virtuelle Java
- Les compilateurs génèrent du code intermédiaire (en
anglais, bytecode)
- Ce code intermédiaire est interprété par les « Java
Virtual Machines » (JVM)
- Modèle « compile once execute everywhere »
-
Java Virtual Machine (JVM) :
- s’exécutent sur les systèmes d’exploitation
(par exemple avec la commande java)
- ou sont intégrées dans les navigateurs Web
- Sémantique du langage plus stricte que celle du langage
C
- Taille et domaine de valeur des types primitifs identiques
sur toutes les plate-formes
- Code source Unicode (accents et autres glyphes)
- Bibliothèques standards riches
précédent suivant
La portabilité du code Java a toujours été un objectif pour
ses concepteurs. Cette portabilité n’a pas toujours été parfaite mais
elle est bien plus grande que celle des langages des générations précédentes.
Contrairement à une chaîne de compilation de langage
C qui génère du code directement exécutable sur
un processeur, un compilateur Java génère du code intermédiaire appelé en
anglais bytecode. Ce code est contenu dans un
fichier dont le suffixe est .class. Un fichier
.class peut être chargé par une machine
virtuelle Java et interprété par celle-ci. Le code intermédiaire est totalement
indépendant de la machine sur laquelle il a été généré. Il est aussi
indépendant du compilateur qui l’a produit. Ce code permet de recréer le
fichier source facilement. Le modèle de compilation est appelé en anglais
« compile once, execute everywhere ».
Les tailles et les domaines de valeur des types primitifs
sont identiques sur toutes les plates-formes. Ainsi, quelle que soit
l’architecture matérielle sur laquelle le programme s’exécute, un
entier utilisé par un programme Java possède une taille identique. Le principe
du bytecode date des années 1980 avec son introduction dans certains
compilateurs du langage Pascal. Il se retrouve aussi aujourd’hui dans
l’ensemble de la chaîne de compilation de Microsoft associée aux langages
C et C#.
Les JVM s’exécutent directement sur les systèmes
d’exploitation. C’est par exemple la commande java sous Linux. Elles peuvent être embarquées dans les
navigateurs Web.
La sémantique du langage Java est plus contraignante que
celle du langage C. Par exemple, il est
obligatoire d’avoir une expression booléenne dans un test.
Le code source des classes peut être écrit en caractères
Unicode. La collaboration entre développeurs préconise l’utilisation de
variables dont le nom est compréhensible par le plus grand nombre.
Comme nous le verrons dans la section 6, les bibliothèques standards
sont très nombreuses.
Christian Bac, Denis Conan, Télécom
SudParis, CSC 4002, Octobre 2015
|