Повышение производительности Java Hotspot VM: Graal, AOT компиляция

Graal: основанный на Java JIT-компилятор

Graal - это высокопроизводительный оптимизирующий, just-in-time (JIT) компилятор, написанный на Java, который интегрируется с Java HotSpot VM. Это настраиваемый динамический компилятор, который вы можете вызывать из Java.

Некоторые из особенностей и преимуществ Graal включают в себя:

  • Гибкие спекулятивные оптимизации
  • Лучше встраивание (inlining)
  • Частичный escape анализ
  • Преимущества инструментов Java и IDE поддержка
  • Метациркулярный подход, обеспечивающий более жесткий контроль генерации кода

Вы можете использовать Graal и в статическом контексте. Статический компилятор Ahead of Time основан на платформе Graal.

Graal является частью сборки JDK и поставляется как внутренний модуль, jdk.internal.vm.compiler. Он связывается с JVM с помощью интерфейса компилятора JVM (JVMCI). JVMCI также является частью сборки JDK и содержится во внутреннем модуле: jdk.internal.vm.ci.

Чтобы включить Graal в качестве JIT-компилятора, используйте следующую опцию в командной строке java:

-XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler

Примечание. Graal является экспериментальной функцией и поддерживается только в Linux-x64.

Опережающая сборка (Ahead-of-Time Compilation)

Компиляция с опережением времени (AOT) улучшает время запуска малых и больших Java-приложений, компилируя классы Java в собственный код перед запуском виртуальной машины.

Хотя JIT-компиляторы работают быстро, для компиляции больших Java-программ требуется время. Кроме того, когда определенные методы Java, которые не скомпилированы, интерпретируются неоднократно, это влияет на производительность. АОТ решает эти проблемы.

Для AOT компиляции используется новый инструмент jaotc. Синтаксис инструмента jaotc следующий:

jaotc <options> <list of classes or jar files>
jaotc <options> <--module name>

Например:

jaotc --output libHelloWorld.so HelloWorld.class
jaotc --output libjava.base.so --module java.base

Инструмент jaotc является частью установки Java, похож на javac.

Укажите сгенерированную AOT библиотеку при выполнении приложения:

java -XX:AOTLibrary=./libHelloWorld.so,./libjava.base.so HelloWorld

При запуске JVM код инициализации AOT ищет библиотеки, указанные с использованием флага AOTLibrary. Если библиотеки не найдены, AOT отключается для этого экземпляра JVM.

Примечание. Компиляция с опережением времени (AOT) является экспериментальной функцией и поддерживается только в Linux-x64.


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки