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.
- cogman10
Leyden сильно полагается на training runs, что я понимаю, но, блин, это довольно сложная задача для настройки.
Инструментарий для выполнения таких training runs практически не существует, и в итоге вам приходится делать что-то более кастомное в рамках вашего build pipeline, если вы хотите это там иметь. Это может быть особенно сложно с более сложными приложениями, вроде тех, которые я поддерживаю.
Мне нравится, что это может дать, но не нравится объём усилий, необходимых для того, чтобы это заработало.
- treyd
Каковы архитектурные различия между этим и ahead-of-time runtime в Android?
- cyberax
Excelsior JET делал это 25 лет назад: https://en.wikipedia.org/wiki/Excelsior_JET
Обидно, что Sun/Oracle так и не объединились с ними, чтобы принести нативные приложения. Это могло бы спасти Java на десктопе.
- java-man
Надеюсь, когда-нибудь мы получим режим только AOT (или компиляцию в нативный код) и, может быть, даже кросс-компиляцию.
- ledo9915
Данные из небольшого побочного проекта: я запускаю пользовательский код в песочнице Piston для сайта с задачами по программированию. Тривиальная Java-программа занимает 2,5–3 секунды реального времени на машине с 4 vCPU, почти всё это — javac плюс запуск JVM. Go занимает около 1,7 секунды на сборку и запуск, а Swift через интерпретатор — 0,4 секунды. Java — причина, по которой мне вообще пришлось поставить глобальный лимит на компилируемые языки. Если AOT снизит время на стороне JVM до нескольких сотен миллисекунд, это изменит то, что может обслуживать небольшая машина.