JEP 544: AOT-компиляция кода ускоряет запуск Java-приложений до 80%

JEP 544: Ahead-of-Time Code Compilation

JEP 544 расширяет AOT-кэш HotSpot, сохраняя в нём оптимизированный нативный код, скомпилированный во время тренировочного запуска. В production-запуске этот код загружается мгновенно, сокращая время старта на 65–80% и ускоряя выход на пиковую производительность. При изменении нагрузки HotSpot динамически деоптимизирует и реоптимизирует методы, сочетая преимущества AOT и JIT без изменения кода приложений и настроек JVM.

AOT code and JIT code can coexist and are completely interoperable since they are created by the same compilers, C1 and C2.
  1. cogman10

    Leyden сильно полагается на training runs, что я понимаю, но, блин, это довольно сложная задача для настройки.

    Инструментарий для выполнения таких training runs практически не существует, и в итоге вам приходится делать что-то более кастомное в рамках вашего build pipeline, если вы хотите это там иметь. Это может быть особенно сложно с более сложными приложениями, вроде тех, которые я поддерживаю.

    Мне нравится, что это может дать, но не нравится объём усилий, необходимых для того, чтобы это заработало.

  2. treyd

    Каковы архитектурные различия между этим и ahead-of-time runtime в Android?

  3. cyberax

    Excelsior JET делал это 25 лет назад: https://en.wikipedia.org/wiki/Excelsior_JET

    Обидно, что Sun/Oracle так и не объединились с ними, чтобы принести нативные приложения. Это могло бы спасти Java на десктопе.

  4. java-man

    Надеюсь, когда-нибудь мы получим режим только AOT (или компиляцию в нативный код) и, может быть, даже кросс-компиляцию.

  5. ledo9915

    Данные из небольшого побочного проекта: я запускаю пользовательский код в песочнице Piston для сайта с задачами по программированию. Тривиальная Java-программа занимает 2,5–3 секунды реального времени на машине с 4 vCPU, почти всё это — javac плюс запуск JVM. Go занимает около 1,7 секунды на сборку и запуск, а Swift через интерпретатор — 0,4 секунды. Java — причина, по которой мне вообще пришлось поставить глобальный лимит на компилируемые языки. Если AOT снизит время на стороне JVM до нескольких сотен миллисекунд, это изменит то, что может обслуживать небольшая машина.

Ещё за этот день

2026-09-10