以前很容易。我们将 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
我知道网上有很多关于这个问题的文件,但是我读过的文件都没有提供关于该主题的可靠知识。
答案 0 :(得分:4)
OpenJDK是相当模块化的,最典型的例子是Graal编译器,它可以通过JVMCI接口插入,并完全替代顶级JIT编译器(C2)。 Graal仍将HotSpot用于经过战斗考验的基础架构:对象模型,类加载,配置文件,调试,GC ...
有一些“接口” /组件:
要实现新的VM,您需要实现VM接口,JNI和字节码编译器/解释器,然后您可以重用Java + libjava中的所有代码,而无需移植/重新实现任何功能。您可以免费获得所有IO,NIO,套接字,甚至是类加载器。
GraalVM只是具有超强功能的OpenJDK,它包括一个最新的编译器(Graal),一个用于构建(快速)编程语言(松露)和AOT优化编译器(SubstrateVM)的框架...等等。