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

Contenu supprimé Contenu ajouté
Automatique : Mise à jour de la navigation entre les chapitres
Ftiercel (discussion | contributions)
m Replace dans le temps.
Ligne 5 :
 
Sur les ordinateurs, la même machine virtuelle est capable de lancer :
* des applications indépendanteindépendantes (''standalone'' en anglais), lancéelancées et fonctionnant comme toute application installée sur la machine,
* des applets, à partir d'une page HTML (internet, réseau local ou en local sur la machine). Pour cela, il faut que le navigateur possède une extension permettant d'utiliser une machine virtuelle Java pour l'exécution de ces applets.
 
=== 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 <code>.class</code>.
 
=== 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 ===
Ligne 27 ⟶ 16 :
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.
 
LesDepuis machinesJava virtuellesSE de1.3, Sunles ultérieuresmachines àvirtuelles 1.2d'Oracle contiennent un interpréteur capable d'optimiser le code appelé HotSpot.
 
L'interpréteur effectue plusieurs tâches :
Ligne 39 ⟶ 28 :
* 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.
 
=== 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 <code>.class</code>.
 
=== 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).
 
== 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 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.
Ligne 52 :
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.
Ligne 60 :
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. <!-- Il faut toutefois avoir en tête que pour beaucoup d'applications, la performance n'est pas un critère prépondérant. De plus, force est de constater que la vitesse des machines augmente considérablement d'année en année et que les inconvénients de la lenteur peuvent être comblés avec l'augmentation de la puissance de la machine. -->
 
Toutefois avec les machines virtuelles actuelles, cet argument n'a plus autant de poids. Une nouvelleLa technique appelée « compilation juste à temps » (JIT : ''Just-In-Time'') 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 (la première fois) en code natif directement exécutable par le processeur.
 
Toute méthode s'exécute ainsi aussi rapidement que du code natif.
 
[[Image:Java Compilation JIT.svg|center|Fonctionnement de la compilation «  juste à temps  » de Java]]
 
== Processeur Java ==