TToolBox
💻
💻 dev
16 апреля 2026 г.6 мин чтения

Как запустить Java без JVM: Spring Boot Native Images в 2026

Как запустить 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 package
    После завершения появится файл target/myapp (Linux) или myapp.exe (Windows).
  • 3️⃣ Запустите образ:
    ./target/myapp
    Приложение будет готово обслуживать запросы уже через 180 ms.

Для контейнеризации используйте 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 — работает онлайн, без регистрации.
Поделиться:

Теги

#java#spring-boot#native-image#graalvm#performance