Accueil
 Sommaire du cours
 1  Introduction à Java
 1.1  Vous avez dit Java ?
 1.2  Que recouvre le mot Java ?
 1.3  Caractéristiques
 1.3.1  Java un langage Objet
 1.3.2  Machine Virtuelle Java
 1.3.3  Robustesse
 1.4  Historique de l'API
 1.5  Environnements de développement
 1.6  En savoir plus
 Questions
 2  Concepts de bases de Java
 3  Classes et objets en Java
 4  Généralisation spécialisation en Java
 5  Organisation des sources Java
 6  API Java
 7  Exceptions en Java
 8  Concepts objets avancés en Java
 Bibliographie

 Contacts

W3C validator

Département INF  
 Conception et programmation orientées objet


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