【AICon】AI 大模型超全落地场景&最佳实践 了解详情
写点什么

IBM 开源 JVM 实现 OpenJ9,并提交 Eclipse 基金会托管

  • 2017-09-26
  • 本文字数:2364 字

    阅读完需:约 8 分钟

8 月 16 - 19 日,与零一万物李开复、蔚来李斌、面壁智能李大海,及工商银行、交通银行、华夏银行等 100+ 行业专家相聚 FCon x AICon

近日,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 社区的发展增加新的推动力。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017-09-26 19:004820

评论

发布
暂无评论
发现更多内容

Redis哨兵原理,我忍你很久了!

Java 程序员 后端

RocketMQ msgId与offsetMsgId释疑(实战篇)

Java 程序员 后端

RocketMQ一行代码造成大量消息发送失败

Java 程序员 后端

RocketMQ消息丢失场景及解决办法(1)

Java 程序员 后端

RocketMQ 主从同步读写分离机制

Java 程序员 后端

SAP为Java 16贡献JEP 387 “弹性元空间”

Java 程序员 后端

Redis 的持久化机制和AOF文件重写原理

Java 程序员 后端

Redis(四):整数集合

Java 程序员 后端

Redis小白入门教程

Java 程序员 后端

RocketMQ源码分析之NameServer

Java 程序员 后端

Redis(二十六):Sentinel—

Java 程序员 后端

ReactJS实战之生命周期

Java 程序员 后端

macOS 环境安装Flutter

坚果

flutter 11月日更 安装部署

Redis实现feed流(1)

Java 程序员 后端

redis数据迁移之redis-shake

Java 程序员 后端

Redis的各种用途以及使用场景

Java 程序员 后端

【Flutter 专题】12 图解圆形与权重/比例小尝试

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 11月日更

Redis常用命令总结

Java 程序员 后端

Redis的各种用途以及使用场景(1)

Java 程序员 后端

Redis(十一):键的生存时间与过期时间

Java 程序员 后端

RocketMQ消息丢失场景及解决办法

Java 程序员 后端

Redis(二十一):复制

Java 程序员 后端

redis之单机多节点集群

Java 程序员 后端

Redis安装与部署新手入门教程

Java 程序员 后端

Redis实现feed流

Java 程序员 后端

Redis(十八):服务器

Java 程序员 后端

Redis(十六):事件

Java 程序员 后端

RocketMQ 千锤百炼--哈啰在分布式消息治理和微服务治理中的实践

Java 程序员 后端

RocketMQ消息轨迹-设计篇

Java 程序员 后端

Redis哨兵模式原理剖析,监控、选主、通知客户端你真的懂了吗?

Java 程序员 后端

Redis持久化方式AOF技术原理?一文带你从底层彻底吃透

Java 程序员 后端

IBM开源JVM实现OpenJ9,并提交Eclipse基金会托管_IBM_张卫滨_InfoQ精选文章