Создание нативного образа
Компиляция до выполнения
«Создание нативного образа» — бесплатный урок Java Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Java Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Java Academy содержит 4 уроков всего.
Создание нативного образа
Инструмент native-image превращает скомпилированный байткод Java в единый автономный нативный исполняемый файл. В этом уроке Вы пройдёте процесс сборки, узнаете, что происходит внутри, и научитесь запускать результат.
Начните с обычной Java
Нативный образ создаётся из обычных скомпилированных классов. Представьте простую программу, которую мы собираемся скомпилировать в нативный код.
public class Hello {
public static void main(String[] args) {
System.out.println("Hello from a native binary!");
}
}Сначала скомпилируйте, затем соберите
Всего два шага: сначала javac Hello.java создаёт Hello.class, затем native-image Hello создаёт исполняемый файл с именем hello. Сборка намного медленнее компиляции, поскольку анализирует всю программу.
Анализ замкнутого мира
Инструмент создания нативного образа выполняет анализ замкнутого мира: он должен видеть весь код, который когда-либо может быть запущен. Начиная с main, он проходит по каждому достижимому методу и включает в двоичный файл только эти методы. Всё недостижимое удаляется (устранение мёртвого кода на этапе компоновки).
Компиляция до запуска
Достижимые методы заранее компилируются в нативный машинный код. Поскольку не остаётся байткода для интерпретации и нет динамической компиляции, отсутствует и прогрев — программа работает на полной скорости с первой инструкции.
Инициализация во время сборки
Чтобы запускаться быстро, средство создания нативного образа может выполнять статические инициализаторы во время сборки и встраивать полученную кучу в образ (это куча образа). Благодаря этому некоторые объекты уже существуют в момент запуска программы.
Запуск исполняемого файла
Результат представляет собой обычный исполняемый файл OS. Вы запускаете его напрямую — не требуется ни java -jar, ни установленная JVM на целевой машине. В зависимости от флагов он также может быть полностью или преимущественно статически связанным.
Распространённые флаги сборки
Полезные параметры:
-o name— имя выходного файла.--no-fallback— завершить сборку с ошибкой, а не создавать резервный образ, зависящий от JVM.-O2/-O3— уровень оптимизации.--static— полностью статически связанный двоичный файл (Linux).
Память и диск
Сама сборка требует много памяти: большим приложениям может понадобиться несколько гигабайт RAM и несколько минут CPU. Эта плата вносится один раз во время сборки в обмен на быстрый и недорогой запуск во время выполнения.
Сборка через Maven/Gradle
В реальных проектах Вы редко вызываете native-image вручную. Плагины GraalVM для сборки нативных образов встраивают этот процесс в Maven (native:compile) и Gradle (nativeCompile), поэтому двоичный файл становится частью обычного конвейера сборки.
Проверка запуска
После сборки сравните время запуска: запуск через java -jar может занимать сотни миллисекунд, тогда как нативный двоичный файл возвращает управление за однозначное число миллисекунд. Именно ради измеримой разницы и создают нативные образы.
Быстрая проверка
Проверьте своё понимание создания нативных образов.
Итоги
Вы изучили сборку нативного образа:
- Начните со скомпилированного байткода;
native-imageсоздаёт автономный исполняемый файл. - Анализ замкнутого мира находит весь достижимый код, начиная с
main. - Достижимый код компилируется с помощью AOT, а недостижимый удаляется.
- Инициализация во время сборки встраивает кучу образа для быстрого запуска.
- Сборка медленная и требует много памяти; интегрируйте её с помощью плагинов Maven/Gradle.
Часто задаваемые вопросы
Урок «Создание нативного образа» бесплатный?
Да — полный текст урока «Создание нативного образа» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Java Academy, подпишись на CoddyKit PRO. Курс Java Academy содержит 4 уроков всего.
Чему я научусь в уроке «Создание нативного образа»?
Компиляция до выполнения Ты практикуешь Java Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Java Academy?
Предыдущий опыт не требуется. Java Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Создание нативного образа»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Java Academy?
Да. Каждый урок Java Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Что такое GraalVM
- Создание нативного образа
- Рефлексия и конфигурация
- Компромиссы нативного образа