AOT-кэш и Project Leyden

Тема дорожной карты · Java

Project Leyden — проект OpenJDK, сокращающий время старта и прогрева Java-приложений за счёт переноса части работы JVM на более ранний этап: «тренировочный» запуск. Итог тренировки сохраняется в AOT-кэш, который переиспользуют все последующие запуски. В отличие от компиляции в нативный бинарь это остаётся тот же HotSpot: полная совместимость с рефлексией, динамической загрузкой классов и агентами, пиковая производительность JIT никуда не девается. Функциональность выходит порциями: JEP 483 (Java 24) кэширует загрузку и линковку классов, JEP 514 (Java 25) сводит создание кэша к одной команде, JEP 515 (Java 25) добавляет в кэш профили методов, а JEP 516 (Java 26) делает формат кэша совместимым с любым сборщиком мусора, включая ZGC.

Как это работает

Тренировочный запуск выполняет приложение на репрезентативной нагрузке и записывает, какие классы загружались и линковались и какие методы были горячими. Из этой конфигурации собирается кэш, который боевые запуски подхватывают флагом:


java -XX:AOTCacheOutput=app.aot -cp app.jar com.example.Main

# обычный запуск с кэшем
java -XX:AOTCache=app.aot -cp app.jar com.example.Main

Старт ускоряется без единого изменения кода — в демонстрациях JEP типовые приложения стартуют в два-три раза быстрее. Профили методов из JEP 515 дополнительно убирают долгий прогрев: JIT сразу компилирует горячие методы в оптимизированный код, не тратя первые минуты работы на повторный сбор статистики. Если кэш не подходит текущей конфигурации — другая версия JDK, другой classpath — JVM просто игнорирует его и стартует обычным путём, деградации не происходит.

Когда применять

Типичные ошибки

Связанные понятия

Полезные ресурсы

Проверить знания (2)

Загрузка вопросов…