« Programmation Java/Machine virtuelle » : différence entre les versions

Un livre de Wikilivres.
Contenu supprimé Contenu ajouté
Tavernierbot (discussion | contributions)
Tognopop (discussion | contributions)
Ligne 45 : Ligne 45 :
== Les interfaces de programmation (API) Java : des fonctionnalités énormes ==
== Les interfaces de programmation (API) Java : des fonctionnalités énormes ==


La machine virtuelle Java possède un ensemble de bibliothèques extrêmement complètes : des bibliothèques graphiques, des bibliothèques systèmes,etc...
La machine virtuelle Java possède un ensemble de bibliothèques extrêmement complètes : des bibliothèques graphiques, des bibliothèques systèmes, etc...


Toutes ces bibliothèques sont totalement portables d'un environnement à un autre.
Toutes ces bibliothèques sont totalement portables d'un environnement à un autre.

Version du 2 mai 2008 à 01:54

Introduction à la machine virtuelle Java

Le langage Java a réutilisé une notion extrêmement importante en informatique : la notion de machine virtuelle. Cette machine virtuelle est composée de trois parties :

Chargeur de classe

Le chargeur de classe charge les classes nécessaires à l'exécution, alloue l'espace mémoire nécessaire et établit les liens entre elles (linkage). Le chargeur de classe connait la structure d'un fichier .class.

Gestionnaire de mémoire

Le gestionnaire mémoire assure les services liés à la mémoire, en particulier :

  • un ramasse-miette (garbage collector) ;
  • une protection mémoire même sur les machines dépourvues d'unité de gestion mémoire (MMU).

Environnement d'exécution

Le langage Java est un langage orienté objet qui doit être compilé. Cependant, le compilateur Java ne produit pas directement un fichier exécutable, mais du code intermédiaire sous la forme d'un on plusieurs fichiers dont l'extension est .class ; ce code intermédiaire est appelé bytecode. Pour exécuter le programme, il faut utiliser la machine virtuelle Java qui va interpréter le code intermédiaire en vue de l'exécution du programme.

Il ne s'agit pas d'une compilation normale, car le compilateur ne produit pas du code compréhensible directement par le microprocesseur, ni d'un langage interprété, car il y a tout de même la notion de compilation, mais une situation intermédiaire entre un langage interprété et un langage complètement compilé.

En d'autres termes, un programme Java, une fois compilé en code intermédiaire, n'est compréhensible que par la machine virtuelle, qui va traduire à la volée (interprétation) les instructions exécutées en code compréhensible par la machine physique.

Les machines virtuelles de Sun ultérieures à 1.2 contiennent un interpréteur capable d'optimiser le code appellé HotSpot.

L'interpréteur effectue plusieurs tâches :

  • vérification du code intermédiaire ;
  • traduction en code natif (spécifique à la plateforme, au système d'exploitation) ;
  • optimisation.

Outre un interpréteur, l'environnement d'exécution fournit également :

  • un noyau multitâches pour les machines virtuelles fonctionnant sur des systèmes monotâches (green virtual machines) ;
  • un « bac à sable » (sandbox) pour l'exécution de processus distants.

Avantage de l'utilisation de la machine virtuelle

L'utilisation d'une machine virtuelle a l'énorme avantage de garantir une vraie portabilité. Il existe des machines virtuelles Java pour de très nombreux environnements : Windows, MacOS, Linux et des tonnes d'autres.

Ces machines virtuelles sont capables d'exécuter exactement le même code intermédiaire (les mêmes fichiers Java en bytecode) avec une totale compatibilité. C'est là une situation unique et assez remarquable qui a fait le succès de ce langage.

La machine virtuelle Java n'est pas uniquement développée sur des ordinateurs classiques, nous pouvons trouver une multitude d'appareils disposant d'une machine virtuelle Java : Téléphones portables, des assistants personnels (PDA). …

Les interfaces de programmation (API) Java : des fonctionnalités énormes

La machine virtuelle Java possède un ensemble de bibliothèques extrêmement complètes : des bibliothèques graphiques, des bibliothèques systèmes, etc...

Toutes ces bibliothèques sont totalement portables d'un environnement à un autre.

La machine virtuelle Java offre donc un véritable système d'exploitation virtuel, qui fonctionne au dessus du système d'exploitation, de la machine cible et le masque totalement aux applications.

La lenteur de Java

Le gros point faible du concept de machine virtuelle est que le code intermédiaire (bytecode) est interprété par la machine virtuelle. Ceci entraîne une baisse importante des performances des programmes.

Toutefois avec les machines virtuelles actuelles, cet argument n'a plus autant de poids. Une nouvelle technique appelée « compilation juste à temps » (JiT) est employée par la machine virtuelle quand une méthode est appelée. Cette technique consiste à compiler à la volée la méthode appelée en code natif directement interprétable par le processeur.