@levinzhang
2017-09-24T22:10:07.000000Z
字数 2752
阅读 659
近日,IBM将其J9 Java 虚拟机命名为OpenJ9,托管至Eclipse基金会并在GitHub上开源,OpenJ9的定位是企业级的开源Java虚拟机。
近日,IBM将其J9 Java 虚拟机命名为OpenJ9,托管至Eclipse基金会并在GitHub上开源,OpenJ9的定位是企业级的开源Java虚拟机。
在2006年9月20旧金山举办的JavaOne上,IBM就曾宣布开源其Java虚拟机OpenJ9,该项目的领导者Dan Heidinga做过J9相关的技术演讲,阐述了该虚拟机的技术架构和相关的生态系统。当时,IBM计划随Java 9一起开源其OpenJ9。根据Dan Heidinga的描述,OpenJ9的核心价值在于高性能、高可用性和适用性。OpenJ9的技术架构如下所示:
为了实现性能的提升,OpenJ9在数据结构、类加载、线程管理、解释器等方面都进行了优化。按照IBM的规划,OpenJ9与Eclipse OMR的关系如下图所示:
其中,Eclipse OMR是用于构建可靠、高性能语言运行时的跨平台组件。这组件使用C和C++编写,借助它能够构建跨不同硬件和操作系统平台的语言运行时,该项目也在GitHub开源。根据RednaxelaFX的解读,OMR是最上游,OpenJ9基于OMR构建出一个完整的JVM,OpenJ9 + OpenJDK Java Class Library构成出一个完整的Java运行时环境,然后在此基础上添加IBM的特化功能最终构成IBM发行版J9及其配套库。
关于公众可能关注的问题,Eclipse OpenJ9在官网上进行了回应 。
Eclipse OpenJ9 是 OpenJDK 的替代方案吗?
不是。Eclipse OpenJ9 是一个 Java 虚拟机(JVM),也就是运行 Java 应用程序的引擎,而 OpenJDK 是一个完整的开发工具包,除了JVM还包含其他的组件比如Java类库。默认情况下,OpenJDK 使用名为 Hotspot 的 JVM进行构建。简单来说,OpenJ9 是JVM的替代方案,可将其包含到 OpenJDK的二进制文件中。
Eclipse OpenJ9与Hotspot 的差别在哪里?
Hotspot 和 Eclipse OpenJ9 都是可以包含在 OpenJDK中的 Java 虚拟机,但它们具有不同的功能。按照不同的构建过程,你可以让OpenJDK二进制文件中包含 Eclipse OpenJ9 ,也可以包含 Hotspot。
OpenJ9中的J9代表什么含义呢?
为了澄清公众的误解,J9 != Java 9。如果读者对它名字的来源感兴趣的话,可以参考这篇博客文章。
既然如此,我们为什么要使用 Eclipse OpenJ9 而不是默认的 JVM呢?
如果你正在为应用程序寻找企业级的运行时环境,那么建议使用 Eclipse OpenJ9 构建 OpenJDK。这个高性能、可扩展的虚拟机是众多 IBM 企业软件产品的核心。你还可以进一步地优化OpenJ9,提升特定场景下Java应用的性能。
为什么 IBM 将他们的 J9 虚拟机贡献给了 Eclipse 基金会?
IBM 公开承诺要将创新带入开源开发社区。多年以来,J9虚拟机是Java版IBM SDK的核心,将它开源,阐明了IBM的兑现承诺的决心。
OpenJ9 虚拟机构建在 Eclipse OMR 项目的核心技术之上,OMR 是由 IBM 在 2016 年贡献给 Eclipse 基金会的。IBM 持续地投入资源到Eclipse OpenJ9 和 Eclipse OMR项目中,以确保企业级产品能够利用最新的硬件技术。
OpenJ9的网站上提供了预构建版本的下载地址(通过AdoptOpenJDK下载)以及自行打包构建的完整教程。OpenJ9本身对Java应用进行了一些优化,我们无需再调整命令行选项。如果你想配置不同的垃圾收集器或者要探索特定硬件的特性的话(比如GPU),那么可以读取IBM知识中心上已有的用户文档。
OpenJ9的关注点主要在性能方面,因此Phoronix Media站点的创始人Michael Larabel运行了一些快速的基准(Benchmark)测试,以了解OpenJ9和Hotspot之间性能的差异。
在测试中,他分别使用了将OpenJ9打包至OpenJDK 9的构建版本以及当时的OpenJDK 9 Hotspot构建版本(作者在进行测试时,正式版本的Java 9尚未发布——编者注),作为参考,还使用了OpenJDK 8 Hotspot构建版本。这三个JDK都可以通过AdoptOpenJDK站点获取预先构建好的版本。
Michael使用两台Linux机器进行了快速的基准测试,其中一台机器的处理器是Intel Core i9 7900X,操作系统是基于Linux 4.13 kernel的Ubuntu 17.04。另外一台机器是双插槽 Tyan 服务器,处理器是Xeon Gold 6138,操作系统是Debian GNU/Linux 9.1。每台机器上都使用这三个OpenJDK进行了测试,有一些Java基准测试是通过Phoronix Test Suite运行的。
首先看一下Core i9 7900X机器的结果。Michael先在这三个OpenJDK上执行了j2dbench测试,这是一个关注图形处理的基准测试。在使用OpenJ9时,文本渲染的速度明显比较慢,而在另外两个基准测试中,它与OpenJDK性能差别不大。OpenJDK 8和9本身的差别也不大。该测试结果如下图所示:
同时,他还运行Java版本的SciMark2进行一些数学相关的基准测试,结果如下:
至少就目前来看,OpenJ9的性能要比较明显地落后于Hotspot。
在基于Java的Bork文件加密方面,Hotspot也更快:
在这些测试版本中,JMH的性能表现也非常类似:
在双插槽的Xeon Gold Tyan服务器上,Hotspot/OpenJ9的基准测试结果非常类似,可以参考该文了解详细结果。
OpenJ9是一个非常新的JVM项目,几个月之后再来评估它的性能也许更合理一些。在这篇性能对比文章的评论区,有些读者发表了一些有价值的评论。有人认为,不应该像使用OpenJDK那样使用J9,JVM的调优知识对于性能改善至关重要。J9针对x86架构可能还不太成熟,或者需要一些配置选项。J9最初是针对大规模System-Z机器上的应用设计的,因此它需要时间来对JVM进行预热,从而确定哪些字节码需要进行优化,这个“分析器”需要根据应用的运行来进行调整。如果要在x86计算机或小型设备上运行J9的话,毫无疑问需要调整一些JVM的配置。
随着OpenJ9开源资料的完善,我们会对这个JVM有更多的了解,相信它也会对整个Java社区的发展增加新的推动力。