Как запустить Java без JVM: Spring Boot Native Images в 2026
Spring Boot Native позволяет собрать Java‑приложения в нативные образы, работающие без JVM, с запуском за меньше 200 мс и потреблением памяти до 30 МБ.
Spring Boot Native позволяет собрать Java‑приложения в нативные образы, которые работают без JVM, стартуя за меньше 200 мс и потребляя до 30 МБ памяти. Это достигается благодаря GraalVM Native Image, который компилирует байт‑код в машинный код во время сборки, а не во время исполнения.
Как работает Spring Boot Native Image?
Spring Boot Native использует технологию GraalVM Native Image, преобразуя байт‑код в самостоятельный исполняемый файл, который не требует наличия JVM на целевой машине. При этом все классы, ресурсы и метаданные включаются в образ во время компиляции.
- 1️⃣ GraalVM анализирует статический код и определяет, какие классы действительно нужны.
- 2️⃣ На этапе AOT‑компиляции (Ahead‑Of‑Time) генерируется машинный код для каждой используемой функции.
- 3️⃣ Полученный
.exeили.binфайл можно запускать напрямую, без установки JDK.
Пример команды Maven:
mvn -Pnative spring-boot:build-image
Почему стоит перейти на нативные образы в 2026 году?
Нативные образы дают заметные преимущества в 2026 году, когда облачные провайдеры активно тарифицируют ресурсы по секундам.
- 🚀 Время старта снижается в среднем на 90 %: с 2 секунд до 200 мс.
- 💾 Потребление памяти падает до 30 МБ, что в 10‑кратном размере меньше, чем у обычного JVM‑процесса (≈300 МБ).
- 💰 Экономия до 30 % расходов на инфраструктуру, что при бюджете 500 000 ₽ в месяц сокращает затраты на ≈150 000 ₽ в год.
- 🔒 Уменьшение поверхности атаки: отсутствие JIT‑компилятора и динамической загрузки классов.
Что нужно установить для создания нативного образа?
Для сборки Spring Boot Native необходимо подготовить локальное окружение.
- 1. JDK 17 (или новее) – базовый компилятор Java.
- 2. GraalVM 22.3 с включённым компонентом
native-image. Установить можно командой:gu install native-image - 3. Плагин spring-boot-maven-plugin версии 3.2+ в
pom.xml. - 4. Docker (опционально) – для создания контейнеров с нативным образом.
- 5. Пакет org.graalvm.nativeimage в
build.gradleпри использовании Gradle.
Как собрать и запустить приложение Spring Boot в нативном режиме?
Сборка нативного образа состоит из трёх основных шагов.
- 1️⃣ Добавьте профиль
nativeвpom.xml:<profiles> <profile> <id>native</id> <properties> <skipTests>true</skipTests> </properties> </profile> </profiles> - 2️⃣ Выполните команду сборки:
После завершения появится файлmvn -Pnative -DskipTests clean packagetarget/myapp(Linux) илиmyapp.exe(Windows). - 3️⃣ Запустите образ:
Приложение будет готово обслуживать запросы уже через 180 ms../target/myapp
Для контейнеризации используйте docker build с базовым образом oraclelinux:8-slim:
FROM oraclelinux:8-slim
COPY target/myapp /app/myapp
ENTRYPOINT ["/app/myapp"]
Какие ограничения и подводные камни есть у Native Image?
Хотя Native Image обещает ускорения, у него есть свои особенности, которые важно учитывать.
- ⚙️ Отсутствие динамической загрузки: рефлексия и динамический прокси должны быть объявлены заранее в файлах конфигурации
reflect-config.jsonиproxy-config.json. - 🧩 Некоторые библиотеки (например, Hibernate 5.x) требуют дополнительных настроек или обновления до версии, совместимой с GraalVM.
- 📦 Размер образа может достигать 50‑70 МБ, что всё ещё больше, чем у простого скрипта, но значительно меньше, чем типичный Docker‑образ JDK (≈200 МБ).
- ⏱️ Время компиляции AOT может быть долгим: для крупного микросервиса 1,5‑2 часа на обычном ноутбуке Intel i7‑12700H.
Что делать, если приложение не проходит AOT‑компиляцию?
Если сборка падает с ошибкой «ClassNotFoundException» или «UnsupportedFeature», выполните следующие действия.
- 1️⃣ Запустите
native-image-agentв режиме профилирования, чтобы собрать информацию о реальном использовании рефлексии:java -agentlib:native-image-agent=config-output-dir=./native-config -jar target/myapp.jar - 2️⃣ Сгенерированные файлы разместите в
src/main/resources/META-INF/native-image. - 3️⃣ При необходимости добавьте ручные правила, например:
{"name":"org.example.MyClass","allDeclaredConstructors":true} - 4️⃣ Перезапустите сборку с профилем
nativeи проверьте журнал.
Помните, что большинство проблем решаются за один‑два дня, а полученный прирост производительности окупает затраты уже в первый месяц эксплуатации.
Воспользуйтесь бесплатным инструментом Native Image Builder на toolbox-online.ru — работает онлайн, без регистрации.
Теги