Ответ
Нативная сборка (Native Image) — это технология, позволяющая скомпилировать Java-приложение (байт-код) заранее (Ahead-Of-Time, AOT) в исполняемый файл машинного кода, специфичный для целевой ОС и архитектуры. Наиболее известна реализация в рамках проекта GraalVM.
Ключевые характеристики и преимущества:
- Быстрый запуск: Исполняемый файл запускается мгновенно, так как отсутствует фаза интерпретации байт-кода JVM и JIT-компиляции.
- Низкое потребление памяти: Образ содержит только необходимые для работы классы и код, что уменьшает footprint.
- Идеально для контейнеров и serverless: Маленький размер и быстрый старт делают нативные образы отличным выбором для микросервисов в Docker и FaaS-платформ (AWS Lambda).
Ограничения и особенности:
- Анализ во время компиляции: GraalVM проводит статический анализ для определения всех достижимых классов и методов. Код, использующий динамические возможности (рефлексия, прокси, JNI), требует специальной конфигурации (через файлы
reflect-config.json). - Долгое время сборки: Процесс AOT-компиляции занимает значительно больше времени, чем обычная компиляция в jar.
- Пиковая производительность может быть ниже, чем у оптимизированного JIT-компилятора HotSpot для долгоживущих процессов.
Пример создания нативного образа с помощью Maven и GraalVM Native Build Tools:
# Установка необходимого нативного образа GraalVM
# Сборка нативного исполняемого файла
./mvnw -Pnative native:compile