Java 13
eivd Télécommunications mjn
1.2 La réalisation de java
Le challenge constitué par la création d’un langage utilisable sur le Web est formida-
ble! Le Web est composé de centaines de milliers de machines, formant une galaxie de
noeuds de réseau disparates évoluant eux-même dans un environnement de périphériques
hétérogènes et totalement incompatibles. Vouloir unifier cette galaxie à l’aide d’un langage
de programmation tient de la gageure, voire de l’illusoire. De fait, Java ne parvient que par-
tiellement à ce but; ce qui n’enlève en réalité rien à l’exploit. Java permet d’exécuter des
applications sur la très grande majorité des systèmes raccordés à Internet.
1.2.1 La notion de machine virtuelle
L’idée à la base de la réalisation de Java consiste à réaliser une machine virtuelle. Une
machine virtuelle est une notion bien connue des concepteurs de microprocesseurs, qui ému-
lent la puce à construire à l’aide d’une simulation logicielle. Ceci leur permet de détecter
d’éventuelles erreurs de conception très tôt, avant même la première génération de masques
permettant la fabrication de la puce finale.
Il est possible d’implanter, de manière logicielle, une simulation d’une machine quel-
conque sur une autre machine, même si elle est très différente architecturalement de la
machine à émuler. Cette démarche n’est pas originale : de nombreux éditeurs de logiciels
l’ont empruntée, le plus célèbre ayant écrit un émulateur Intel 803861 sur des machines Mac-
intosh (processeur Motorola 68000), SOLARIS (processeur SPARC), HP-UX (processeur
HP_PA) et nombre d’autres. Sun Microsystems a suivi la même démarche, mais pour inven-
ter un processeur virtuel, la Java Virtual Machine (JVM).
Notons au passage que le code de l’application devant s’exécuter sur une machine vir-
tuelle doit être compilé pour la machine virtuelle : il ne s’agit donc pas de code interprété,
car la machine virtuelle exécute un code qui pour elle, est “natif”. En revanche, la machine
elle-même est en quelque sorte interprétée; pour cette raison, et pour simplifier la terminolo-
gie, nous parlerons de “code interprété” pour du code s’exécutant sur une machine virtuelle.
Une machine virtuelle a de nombreux avantages. Il est (semble-t-il) facile de la rendre
sûre par rapport au système d’exploitation qui l’abrite, car on peut se permettre de lui impo-
ser les limitations adéquates. On peut ainsi interdire à cette machine virtuelle d’utiliser
l’espace d’adressage de la machine réelle en contrôlant les mécanismes d’adressage des
objets en mémoire. Pour rendre le système encore plus sûr, on peut interdire à cette machine
toute utilisation de ressources externes autres que celles implantées de manière native dans la
machine virtuelle.
La machine virtuelle Java remplit tous ces critères, et nombre d’autres encore. Mais il y
a forcément un prix à payer (la gratuité devient de plus en plus chère, de nos jours...), et c’est
dans les performances des applications s’exécutant sur cette machine qu’il faut rechercher ce
1. Le produit en question est mieux connu sous le nom de SoftWindows.