openjdk.ruOpenJDK на русском

JEP 410: Remove the Experimental AOT and JIT Compiler

Удаление AOT- и JIT-компилятора в статусе Experimental (экспериментальная функция)

ОтветственныйVladimir Kozlov
ТипFeature
ОбластьJDK
СтатусClosed / Delivered
Выпуск17
Компонентhotspot / compiler
Обсуждениеhotspot dash compiler dash dev at openjdk dot java dot net
ТрудоёмкостьS
ДлительностьS
РецензентыMikael Vidstedt
Создан2021/03/10 02:59
Обновлён2025/07/02 11:59
Задача8263327

Аннотация

Удалить написанный на Java компилятор в статусе Experimental для компиляции Ahead-of-Time (заблаговременная компиляция и подготовка), или AOT, и just-in-time (JIT). С момента появления этот компилятор использовался мало, а его поддержка требует значительных усилий. Сохранить интерфейс компилятора JVM на уровне Java (JVMCI) в статусе Experimental, чтобы разработчики могли и дальше использовать собранные отдельно версии компилятора для JIT-компиляции.

Мотивация

Компиляция Ahead-of-Time (инструмент jaotc) была включена в JDK 9 в статусе Experimental через JEP 295. Для AOT-компиляции инструмент jaotc использует компилятор Graal, который сам написан на Java.

Компилятор Graal стал доступен как JIT-компилятор в статусе Experimental в JDK 10 через JEP 317.

С момента появления эти возможности в статусе Experimental использовались мало, а их поддержка и развитие требуют значительных усилий. Эти возможности не были включены в сборки JDK 16, опубликованные Oracle, и никто не пожаловался.

Описание

Удалить три модуля JDK:

  • jdk.aot — инструмент jaotc
  • jdk.internal.vm.compiler — компилятор Graal
  • jdk.internal.vm.compiler.managementMBean компилятора Graal

Сохранить эти два исходных файла, относящихся к Graal, чтобы модуль JVMCI (jdk.internal.vm.ci, JEP 243) по-прежнему собирался:

  • src/jdk.internal.vm.compiler/share/classes/module-info.java
  • src/jdk.internal.vm.compiler.management/share/classes/module-info.java

Удалить код HotSpot, относящийся к AOT-компиляции:

  • src/hotspot/share/aot — выгружает и загружает AOT-код
  • Дополнительный код, защищённый условием #if INCLUDE_AOT

Наконец, удалить тесты, а также код в make-файлах, относящийся к Graal и AOT-компиляции.

Альтернативы

Разработчики, которые хотят использовать компилятор Graal для AOT- или JIT-компиляции, могут использовать GraalVM.

Риски и допущения

Мы исходим из того, что разработчики, активно использующие эти возможности, получили достаточно времени и предупреждений об этом удалении.