OpenJDK的虚拟机是否可插入?

时间:2018-12-16 21:51:08

标签: java jvm graalvm open9

以前很容易。我们将 java 虚拟机用作同义词。

现在我们有了Hotspot VM(Oracle JDK),OpenJDK服务器VM,Eclipse OpenJ9 VM和Graal VM

我有点困惑。 OpenJDK是否具有或可以与不同的虚拟机实现结合使用的运行时环境?是否为此提供了标准接口,或者OpenJDK仅支持该接口?

我要求作为运行element = <div id="monetate_lightbox_mask" class=""> browser.execute_script("""var element = arguments[0]; element.parentNode.removeChild(element);""", element) 的两个OpenJDK变体的输出,并且Graal VM在每种情况下都包含java -version

OpenJDK rintime

我知道网上有很多关于这个问题的文件,但是我读过的文件都没有提供关于该主题的可靠知识。

1 个答案:

答案 0 :(得分:4)

OpenJDK是相当模块化的,最典型的例子是Graal编译器,它可以通过JVMCI接口插入,并完全替代顶级JIT编译器(C2)。 Graal仍将HotSpot用于经过战斗考验的基础架构:对象模型,类加载,配置文件,调试,GC ...

有一些“接口” /组件:

  • VM接口(libjvm),一堆低级方法,例如处理本机套接字,打开文件,创建线程...
  • 本机绑定(JNI),这是Java与本机世界之间定义良好的接口。
  • Java本身(包括标准库)实际上用Java实现了数量惊人的Java。
  • libjava,标准库中许多本机方法的本机实现,完全与VM无关。

要实现新的VM,您需要实现VM接口,JNI和字节码编译器/解释器,然后您可以重用Java + libjava中的所有代码,而无需移植/重新实现任何功能。您可以免费获得所有IO,NIO,套接字,甚至是类加载器。

GraalVM只是具有超强功能的OpenJDK,它包括一个最新的编译器(Graal),一个用于构建(快速)编程语言(松露)和AOT优化编译器(SubstrateVM)的框架...等等。