- JVM (Java Virtual Machine) — это программа, которая выполняет скомпилированный Java-байткод.
- Один и тот же байткод работает на Windows, macOS и Linux, поэтому модам не требуется перекомпиляция.
- Игрокам нужен Java Runtime Environment (JRE); моддерам — полный JDK с компилятором.
- Minecraft Java Edition и каждый мод Fabric, включая Opal, работают на JVM.
JVM, или Java Virtual Machine, — это программа, которая запускает Java-код. Вы пишете на Java, компилятор преобразует его в байт-код, а JVM запускает этот байт-код на любой операционной системе. Именно поэтому Minecraft Java Edition и моды, созданные для неё, работают одинаково на Windows, macOS и Linux без перекомпиляции.
Где используется Opal
Opal — это мод для Fabric, поэтому он работает на той же JVM, что и игра. Если вы настраиваете его, руководство по настройке проведет вас через этот процесс.
Что на самом деле делает JVM
JVM выполняет байткод, а не исходный код. Когда вы компилируете программу на Java, вы не получаете исполняемый файл для Windows или Mac. Вы получаете файлы классов, полные байткода — компактного набора инструкций, который понимает JVM. JVM считывает эти инструкции и выполняет их на вашем компьютере.
Именно этот дополнительный слой и является сутью. Один и тот же байткод работает везде, где есть JVM, поэтому "напиши один раз, запускай где угодно" — это краткое объяснение того, почему Java распространилась настолько широко. JVM — это та часть, которая делает это обещание реальным.
JVM, JRE и JDK
Эти три термина часто путают, поэтому вот разделение.
| Термин | Что это такое | Когда это нужно |
|---|---|---|
| JVM | Движок, который выполняет байткод | Всегда, для запуска любой Java-программы |
| JRE | JVM плюс стандартные библиотеки | Для запуска Java-программ |
| JDK | JRE плюс компилятор и инструменты разработки | Для создания Java-программ |
Игроку нужен только runtime для запуска игры. Разработчику, создающему мод, нужен полный JDK, чтобы сначала скомпилировать Java в байткод.
Как JVM быстро выполняет ваш код
JVM начинает с интерпретации байткода по одной инструкции за раз. Во время выполнения она отслеживает, какие методы вызываются чаще всего. Эти "горячие" пути передаются JIT-компилятору, который преобразует их в машинный код в реальном времени. После "разогрева" самый загруженный код работает почти со скоростью машинного кода.
JVM также управляет памятью за вас. Сборщик мусора освобождает объекты, которые вы больше не используете, поэтому вам не нужно вручную освобождать память, как это делается в C. Это одна из причин, почему Java проста в написании и является распространенным первым языком для моддеров.
Почему это важно для Minecraft
Minecraft Java Edition работает на JVM, а также все утилиты и моды, предназначенные для нее. Собственный код клиента может быть написан на Java, Kotlin или другом языке JVM, поскольку они все компилируются в один и тот же байт-код, который выполняет JVM. Fabric мод распространяется как jar-файл с байт-кодом, загрузчик подключает его к игре при запуске, и JVM выполняет все это как один процесс.
Именно поэтому лаунчеры позволяют настраивать такие параметры, как размер кучи и версия Java. Вы настраиваете JVM, на которой работает игра, а не саму игру.
FAQ
Нет. Java — это язык программирования, а JVM — это среда выполнения, которая исполняет скомпилированный код. Другие языки, такие как Kotlin, также компилируются в байт-код и работают на той же JVM.
Вам требуется Java runtime, который включает в себя JVM. Многие лаунчеры поставляются с предустановленной версией, поэтому, возможно, она уже установлена у вас, и вам не потребуется устанавливать её отдельно.
JVM выполняет байт-код. JDK — это полный набор инструментов разработчика, включая компилятор и утилиты, которые вы используете для создания Java-программ изначально.
Сначала она интерпретирует байт-код, а затем JIT-компилятор преобразует наиболее часто используемый код в машинный код во время выполнения программы. Этот разогрев — стоимость запуска; ускорение происходит позже.