Является ли виртуальная машина OpenJDK подключаемой? - PullRequest
0 голосов
/ 17 декабря 2018

В прежние времена это было легко.Мы использовали слова java и виртуальная машина как синонимы.

Теперь у нас есть Hotspot VM (Oracle JDK), OpenJDK Server VM, Eclipse OpenJ9 VM и Graal VM .

Я немного запутался.Есть ли в OpenJDK среда исполнения, которая может использоваться в сочетании с различными реализациями виртуальных машин?Существует ли стандартный интерфейс для этого или он просто поддерживается OpenJDK.

Я спрашиваю в качестве результата выполнения java -version для двух вариантов OpenJDK, и виртуальная машина Graal содержит в каждом случае OpenJDK rintime:

> /Library/Java/JavaVirtualMachines/openjdk11-openj9/Contents/Home/bin/java -version
openjdk version "11.0.1" 2018-10-16
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.1+13)
Eclipse OpenJ9 VM AdoptOpenJDK (build openj9-0.11.0, JRE 11 Mac OS X amd64-64-Bit Compressed References 20181020_7 (JIT enabled, AOT enabled)
OpenJ9   - 090ff9dc
OMR      - ea548a66
JCL      - f62696f378 based on jdk-11.0.1+13)

> /Library/Java/JavaVirtualMachines/openjdk11/Contents/Home/bin/java -version
openjdk version "11.0.1" 2018-10-16
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.1+13)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.1+13, mixed mode)

> /opt/graal/graalvm-ce-1.0.0-rc10/Contents/Home/bin/java -version
openjdk version "1.8.0_192"
OpenJDK Runtime Environment (build 1.8.0_192-20181024123616.buildslave.jdk8u-src-tar--b12)
GraalVM 1.0.0-rc10 (build 25.192-b12-jvmci-0.53, mixed mode)

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

1 Ответ

0 голосов
/ 18 декабря 2018

OpenJDK довольно модульный, ярким примером является компилятор Graal, который можно подключить через интерфейс JVMCI и полностью заменить JIT-компилятор верхнего уровня (C2).Graal по-прежнему использует HotSpot для проверенной в бою инфраструктуры: объектная модель, загрузка классов, профили, отладка, GC ...

Есть несколько "интерфейсов" / компонентов:

  • Интерфейс VM (libjvm), набор низкоуровневых методов, например, для работы с собственными сокетами, открытия файлов, создания потоков ...
  • Собственные привязки (JNI), четко определенный интерфейс между Java иродной мир.
  • Сама Java, включая стандартную библиотеку, на Java реализовано невероятное количество Java.
  • libjava, нативные реализации для многих нативных методов в стандартной библиотеке, этополностью не зависит от виртуальной машины.

Для реализации новой виртуальной машины вам потребуется реализовать интерфейс виртуальной машины, JNI и компилятор / интерпретатор байт-кода, затем вы можете повторно использовать весь код на Java + libjava без переноса /повторная реализация чего-либо, например, вы получаете все IO, NIO, сокеты, даже загрузчики классов бесплатно.

GraalVM - это просто OpenJDK с суперспособностями, в него входит современный компилятор (Graal), инфраструктура для построения (быстрых) языков программирования (Truffle) + оптимизирующий компилятор AOT (SubstrateVM) ...среди прочих вкусностей.

...