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.
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.
| Terme | Ce que c'est | Quand vous en avez besoin |
|---|---|---|
| JVM | Le moteur qui exécute le bytecode | Toujours, pour exécuter tout programme Java |
| JRE | La JVM plus les bibliothèques standard | Pour exécuter des programmes Java |
| JDK | Le JRE plus le compilateur et les outils de développement | Pour 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
Non. Java est le langage; la JVM est l'environnement d'exécution qui exécute le résultat compilé. D'autres langages, comme Kotlin, compilent également en bytecode et fonctionnent sur la même JVM.
Vous avez besoin d'un environnement d'exécution Java, qui inclut la JVM. De nombreux lanceurs en fournissent un par défaut, il est donc possible que vous l'ayez déjà sans avoir à l'installer séparément.
La JVM exécute du bytecode. Le JDK est la suite complète pour les développeurs, comprenant le compilateur et les outils, que vous utilisez pour créer des programmes Java en premier lieu.
Il interprète d'abord le bytecode, puis le compilateur JIT convertit le code le plus fréquemment utilisé en code machine natif pendant l'exécution du programme. Ce temps de démarrage représente le coût initial ; l'accélération se fait par la suite.