Рубрики
Без рубрики

Graal VM – Виртуальная машина Полиглота

Похоже, что в наши дни вся экосистема Java собирается внедрить GraalVM. Каждая библиотека, фреймворк… Помечено graalvm, jvm, java, полиглот.

Похоже, что в наши дни вся экосистема Java собирается внедрить GraalVM. Каждая библиотека, фреймворк и даже спикеры сообщества, разработчики также хотят с гордостью работать над GraalVM, что делает GraalVM незаменимым для современных приложений Java.

Откуда это берется?

Graal VM – это расширение JVM, написанное на чистом Java, поддерживающее многоязычное программирование и опережающую компиляцию, разработанную Oracle. На протяжении многих лет виртуальная машина Java поддерживается и распространяется Oracle для запуска программ Java. Виртуальная машина Java написана в основном на C/C++. Основная цель JVM – запускать байт-код Java (файлы .class) и непрерывно анализировать производительность программы на предмет так называемых горячих точек в программе, которые часто выполняются, и точно в срок (JIT) компилировать их в машинный код (машинный код) для повышения производительности. Это делается во время выполнения, а не до выполнения Java-программы и, следовательно, точно в срок.

Проект Graal OpenJDK демонстрирует, что компилятор, написанный на чистой Java, может генерировать высокооптимизированный код. При этом AOT-компилятор приведет к увеличению времени запуска, так как JIT-компилятору не нужно перехватывать выполнение программы.

Oracle начала разрабатывать виртуальную машину Graal не только для более быстрой JVM, но и для решения текущей проблемы многоязычия с помощью виртуальной машины, написанной на Java. Архитектура виртуальной машины Graal выглядит следующим образом:

Что на самом деле делает виртуальная машина Graal?

“GraalVM – автономный набор для разработки Java для выполнения языков на основе Java или JVM (например, Scala, Kotlin), динамических языков (например, JavaScript, R, Ruby, R, Python), WebAssembly, языков на основе LLVM (например, C и C++) в одной общей среде выполнения”. — — С Graal VM веб-сайта

Особенности

  • Опережающие по времени (AOT) скомпилированные собственные изображения
  • Платформа реализации языка Truffle для реализации сторонней языковой поддержки
  • Низкий объем памяти, ускоряющий работу java
  • Поддержка многоязычия

Внутри дистрибутива виртуальной машины Graal

Компилятор GraalVM — написан на Java и поддерживает как динамическую, так и статическую компиляцию OpenJDK — Многоязычный API и изолированный API Фреймворк Truffle/| — фреймворк языковой реализации для создания языков и инструментов для GraalVM Интерпретатор байт-кода LLVM Интерпретатор JavaScript — совместимый с ECMAScript движок JavaScript Виртуальная машина Java HotspOT/| — среда выполнения с включенным компилятором GraalVM в качестве JIT-компилятора верхнего уровня для языков на основе JVM Node.js — среда выполнения с включенным интерпретатором JavaScript GraalVM в качестве движка JavaScript. Инструмент для создания собственных изображений — фреймворк, позволяющий с опережением времени (AOT) компилировать Java-приложения в условиях закрытого мира в исполняемые образы Fastr — реализация GraalVM языка программирования 3.5.1 GraalPython — реализация GraalVM языка программирования Python 3.7 TruffleRuby — реализация GraalVM языка программирования Ruby 2.6.2 Simplelanguage — Простой демонстрационный язык для GraalVM GraalVisualVM — визуальный инструмент, объединяющий инструменты командной строки JDK и облегченные возможности профилирования Идеальный визуализатор графиков — разработан для просмотра и проверки промежуточных представлений графиков из компиляций GraalVM и Truffle GraalWasm – интерпретатор языка WebAssembly (Wasm) для запуска программ Wasm в двоичном формате.

Почему люди проявляют такой большой интерес?

Я предполагаю, что люди больше заинтересованы в более быстрых стартапах, а облачные собственные изображения так сильно волнуют людей при использовании GraalVM, и это компилирует приложения JVM в собственные исполняемые файлы, что упрощает распространение. Как только вы скомпилируете приложение JVM в собственный исполняемый файл, оно может запускаться без JVM.

Это интересно в мире контейнеров, поскольку процесс запускается быстро, а поскольку виртуальной машины нет, нет кода для генерации с помощью JIT, и процесс использует гораздо меньше памяти (традиционная проблема для JVM в среде с ограниченным объемом памяти).

Собственные образы GraalVM в бессерверной среде очень быстры и способны продемонстрировать, что java все еще находится на пути к другим новым современным языкам программирования.

Установите GraalVM Community Edition на Linux (Ubuntu)

1) Загрузите новую версию Graal VM и распакуйте его в любом месте вашей файловой системы:

$ tar -xvzf graalvm-ce-java11-linux-amd64-19.3.1.tar.gz

2) Переместите распакованный каталог в /usr/lib/jvm/ и создайте символическую ссылку, чтобы упростить вашу жизнь при обновлении версии виртуальной машины Graal:

# mv graalvm-ce-java11-linux-amd64-19.3.1/ /usr/lib/jvm/
# cd /usr/lib/jvm
# ln -s graalvm-ce-java11-linux-amd64-19.3.1 graalvm

3) Добавьте новую конфигурацию альтернатив. Сначала получите номер предварительной настройки, перечислив уже установленные виртуальные машины, а затем используйте этот номер для настройки новой:

# update-alternatives --config java

There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      auto mode
* 1            /usr/lib/jvm/jdk1.8.0_231/bin/java               0         manual mode
  2            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      manual mode

В этом случае у меня установлено 3 альтернативы java, поэтому я собираюсь установить четвертую.

# update-alternatives --install /usr/bin/java java /usr/lib/jvm/graalvm/bin/java 4

Чтобы убедиться, что все работает нормально, установите новую JVM в своей среде:

$ sudo update-alternatives --config java
There are 3 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      auto mode
  1            /usr/lib/jvm/jdk1.8.0_231/bin/java               4         manual mode
  2            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      manual mode
* 3            /usr/lib/jvm/graalvm/bin/java                    0         manual mode

Press  to keep the current choice[*], or type selection number: 3

Чтобы проверить, просто проверьте номер версии:

$ java -version
openjdk version "1.8.0_242"
OpenJDK Runtime Environment (build 1.8.0_242-b06)
OpenJDK 64-Bit GraalVM CE 19.3.1 (build 25.242-b06-jvmci-19.3-b07, mixed mode)

И все готово.

Примечание

Исполняемый файл собственного образа больше не входит в дистрибутив Graal VM. Установите его вручную, используя $GRAALVM_HOME/bin/для установки собственного образа .

Вывод

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

Развлекайся!

Если вам понравилась эта статья, пожалуйста, оставьте лайк или комментарий.

Оригинал: “https://dev.to/abdulfousan/graalvm-polyglot-virtual-machine-4mn2”