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

Contenu supprimé Contenu ajouté
n'est plus de rigueur -> n'a plus autant de pois
Traroth (discussion | contributions)
Ligne 1 :
{{Programmation Java}}
== Introduction à la machine virtuelle java==
Le langage java a introduit une notion extrêmement importante en informatique : la notion de machine virtuelle. Cette machine virtuelle est composée de trois parties :
Le langage java a introduit une notion extrêmement importante en informatique : la notion de machine virtuelle. Le langage java est un langage orienté objet qui doit être compilé. Mais le compilateur java ne produit pas directement un fichier exécutable, mais un on plusieurs fichiers dont l'extension est .class et appelé '''bytecode'''. Pour exécuter le programme, il faut utiliser la machine virtuelle Java qui va '''interpréter''' le bytecode en vue de l'exécution de 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é.
 
===Chargeur de classe===
 
Le chargeur de classe charge les classes nécessaire à 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 de MMU
 
===Environnement d'exécution===
 
Le langage java a introduit une notion extrêmement importante en informatique : la notion de machine virtuelle. Le langage java est un langage orienté objet qui doit être compilé. Mais le compilateur java ne produit pas directement un fichier exécutable, mais un on plusieurs fichiers dont l'extension est .class et appelé '''bytecode'''. Pour exécuter le programme, il faut utiliser la machine virtuelle Java qui va '''interpréter''' le bytecode en vue de l'exécution de 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 bytecode, 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 bytecode
*Traduction en code natif
*Optimisation
 
Outre un interpréteur, l'environnement fournit également :
 
*un noyau multitâche 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==