La Machine Virtuelle

Nous avons parlé de la grande portabilité de Java, mais en quoi cela consiste t-il, et comment ?

Java, à la manière de la jeune plate-forme .NET (prononcez « dot net »), ne génère pas directement des programmes codés en langage machine (des binaires exécutables). On passe par un état intermédiaire : le « byte code ».

Un byte code est un fichier dans le code est à mi-chemin entre un simple code source, et du langage machine.

Expliquons un peu ce principe :

Un développeur créé un programme Java, il a un ou plusieurs fichiers sources d'extension java. Ces fichiers sources sont compilés via un kit de compilation, cela génère ce fameux byte code. C'est ce même byte code qui sera distribué aux utilisateurs.
De son côté, le client va récupérer ce byte code et l'exécuter grâce à ce qu'on appelle une « machine virtuelle ».
Une machine virtuelle est un programme dont le rôle est de lire et de transformer (compiler) du byte code en langage machine, ce code compilé étant enfin exécutable par la machine.


Mais alors, pourquoi passer par une machine virtuelle si c'est pour finir avec un fichier exécutable ?
C'est là que le portabilité de Java entre en action...

Sachez qu'il existe de nombreuses machines virtuelles pour Java, ceci pour beaucoup de supports : les mêmes que nous avons vu plus haut (ordinateur, téléphones portables, etc). Le byte code est indépendant de toute machine, en fait il n'est fait pour aucune machine. C'est le rôle de la machine virtuelle de le comprendre, et d'en faire un logiciel utilisable pour la machine sur laquelle elle se trouve.

Ainsi, avec un seul fichier de type byte code, on peut l'utiliser sur autant de supports qu'il y a de machines virtuelles disponibles.

Un programme Java peut donc être utilisé, sans modification (recodage de la part du concepteur), sous Windows, Linux, BSD, Solaris, MacOS, ... la liste est encore longue ! Voilà d'où vient la portabilité de Java, et pourquoi on le retrouve un peu partout.