Похоже, что в наши дни вся экосистема 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 Pressto 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”