Learn · concepts

Qu'est-ce que la JVM ? La Machine Virtuelle Java Expliquée

La JVM exécute le bytecode Java sur n'importe quel système d'exploitation. C'est pourquoi Minecraft Java Edition et chaque mod Fabric fonctionnent de la même manière sur Windows, macOS et Linux.

TRtrolPublished 5 min read

Qu'est-ce que la JVM ?

La JVM, ou Java Virtual Machine, est le programme qui exécute le code Java. Vous écrivez en Java, un compilateur le transforme en bytecode, et la JVM exécute ce bytecode sur n'importe quel système d'exploitation. C'est pourquoi Minecraft Java Edition et les mods qui lui sont destinés fonctionnent de la même manière sur Windows, macOS et Linux, sans avoir à recompiler. La JVM est la couche d'abstraction qui fait de "écrire une fois, exécuter partout" une réalité, plutôt qu'un simple slogan marketing.

Ce que fait réellement la JVM

La JVM exécute du bytecode, pas du code source. Lorsque vous compilez un programme Java, vous n'obtenez pas d'exécutable Windows ou Mac. Vous obtenez des fichiers de classe remplis de bytecode, un ensemble d'instructions compact que la JVM comprend. La JVM lit ces instructions et les exécute sur votre machine.

Ce niveau supplémentaire est le but recherché. Le même bytecode s'exécute partout où une JVM est présente, c'est pourquoi "écrire une fois, exécuter partout" est la version courte expliquant pourquoi Java s'est répandu si largement. La JVM est la partie qui rend cette promesse réelle. Un fichier jar de mods Fabric fonctionne de la même manière que le joueur soit sur Windows, macOS ou Linux, car ils exécutent tous le même bytecode via la même JVM, et la JVM gère les différences matérielles

JVM, JRE et JDK

Ces trois termes sont souvent confondus, voici donc la distinction.

TermeCe que c'estQuand vous en avez besoin
JVMLe moteur qui exécute le bytecodeToujours, pour exécuter tout programme Java
JRELa JVM plus les bibliothèques standardPour exécuter des programmes Java
JDKLe JRE plus le compilateur et les outils de développementPour créer des programmes Java

Un joueur n'a besoin que d'un environnement d'exécution pour lancer le jeu. Un développeur qui crée un mod a besoin du JDK complet pour pouvoir compiler le Java en bytecode en premier lieu

Comment la JVM exécute votre code rapidement

La JVM commence par interpréter le bytecode instruction par instruction. Pendant son exécution, elle surveille les méthodes les plus fréquemment appelées. Ces chemins critiques sont transmis au compilateur JIT, qui les transforme en code machine natif à la volée. Une fois la phase de démarrage terminée, le code le plus sollicité s'exécute presque à la vitesse native. C'est pourquoi Minecraft peut sembler saccadé pendant les premières secondes, puis se stabilise : le JIT travaille en arrière-plan.

La JVM gère également la mémoire pour vous. Un ramasse-miettes récupère les objets que vous n'utilisez plus, vous n'avez donc pas à libérer la mémoire manuellement comme vous le feriez en C. C'est l'une des raisons pour lesquelles Java est facile à écrire et un langage de prédilection pour les débutants en modding. La gestion de la mémoire est intégrée.

Pourquoi cela compte pour Minecraft

Minecraft Java Edition fonctionne sur la JVM, et il en va de même pour tous les clients utilitaires et mods qui le ciblent. Le code d'un client peut être en Java, Kotlin ou un autre langage JVM, car ils se compilent tous en bytecode que la JVM exécute. Un mod Fabric est livré sous forme d'un fichier jar contenant du bytecode, le chargeur l'intègre au jeu au lancement, et la JVM exécute l'ensemble comme un seul processus.

C'est aussi pour cela que les lanceurs vous permettent d'ajuster des éléments comme la taille du tas et la version de Java à utiliser. Vous configurez la JVM qui héberge le jeu, et non le jeu lui-même. Donner plus de mémoire à la JVM signifie que Minecraft dispose de plus d'espace de travail. Choisir une version plus récente de Java pourrait vous apporter des améliorations de vitesse, car les JVM plus récentes optimisent souvent mieux les chemins de code fréquemment utilisés.

FAQ