Может ли GraalVM сочетать предварительную компиляцию с адаптивной оптимизацией?

Насколько мне известно, JVM может работать по-разному:

Интерпретатор: время выполнения переводит из байт-кода в собственный код снова и снова.

Своевременная компиляция: при необходимости компилируйте части байт-кода в машинный код во время выполнения. Хранение сборников. Накладные расходы / штраф за компиляцию. Предоставляет возможности для адаптивной оптимизации во время выполнения, что невозможно при статической предварительной компиляции.

Hotspot: только часто выполняемые части компилируются JIT. Остальное интерпретируется.

Теперь GraalVM может выполнять предварительную компиляцию байт-кода в собственный код.

Можно ли заранее скомпилировать байт-код и провести адаптивную оптимизацию в горячих точках (в целом и с GraalVM в частности)?

[Уточнение] Я не имею в виду, чтобы AOT компилировал части байт-кода в машинный код и оставлял другие части как байт-код для выполнения JIT-компиляции горячей точки во время выполнения. Это то, что, по-видимому, делает Java-реализация IBM Excelsior Jet, о чем я до сих пор читал. Я имею в виду, что AOT компилирует весь байт-код и заменяет части горячих точек во время выполнения адаптивно оптимизированными перекомпиляциями горячих точек. Это требует правильного подключения / вставки оптимизированного кода в существующий скомпилированный код AOT. [/ разъяснение]

Я не знаю, какая информация нужна для перекомпиляции горячих точек с адаптивной оптимизацией во время выполнения. Нужен ли для этого байт-код? Это означало бы более высокое потребление памяти как стоимость более высокой производительности.

Я не являюсь экспертом в этом вопросе, поэтому, пожалуйста, скажите мне, если какое-либо предположение неверно.


person user573215    schedule 02.05.2019    source источник
comment
Я только что нашел следующее утверждение: «Существуют также реализации Java, в которых компилятор AOT (опережающий время) сочетается либо с JIT-компилятором (Excelsior JET), либо с интерпретатором (компилятор GNU для Java)». К сожалению, ссылок не написано. Источник: en.m.wikipedia.org/wiki/Just-in-time_compilation < / а>   -  person user573215    schedule 02.05.2019


Ответы (1)


См. JEP 295. В нем упоминаются различные режимы AOT, включая многоуровневый AoT, который предоставляет скомпилированный C1 код с инструментами профилирования, которые затем можно оптимизировать с помощью C2 во время выполнения.

person the8472    schedule 02.05.2019
comment
Рекомендую прочитать его всем, кто интересуется оптимизацией производительности. И я подумал, может ли это даже превзойти программу «C». Начиная с C-подобной скорости из-за AOT, отставая из-за профилирования и перекомпиляции, а затем опережая в долгосрочной перспективе из-за адаптивных оптимизаций. - person user573215; 02.05.2019