写点什么

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

2017 年 9 月 26 日

近日,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 年 9 月 26 日 19:004109

评论

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

Java 环境配置与编辑器使用

旭霁

Java IDEA

来了来了,2020 首场 Meetup ,可!

Apache Flink

大数据 flink 流计算 实时计算 大数据处理

数据挖掘|cross_val_score交叉验证使用

黄大路

Python 数据挖掘 学习 数据分析

产品经理中必会SQL技能,相关内容研发可不予支持

韩超

MySQL sql 产品经理

数据湖引擎是什么鬼

数据社

大数据 数据仓库 数据湖 数据架构

游戏夜读 | 联网才能玩的单机

game1night

关于查尔斯-斯特里克兰

黄大路

提升认知 小说 个人提升 认识自己

以不变应万变——复杂系统回归测试新思路

刘华Kenneth

DevOps 敏捷 测试 单体系统 复杂

面试官浅析程序员面试过程中的二三事

joe

互联网 个人成长 方法 职场 文化

作为自由职业者,我的近况

一尘观世界

程序员 自由职业 复盘

原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (三)单元测试在整个测试体系中的位置

编程道与术

软件测试 TDD 单元测试 集成测试 验收测试

Java并发编程--ReentrantLock

Java收录阁

并发编程

拜托,别再问我Zookeeper如何实现分布式锁了!

不才陈某

zookeeper 分布式 后端 分布式锁

如何快速对应用系统做一个360度画像诊断?

姜戈

Java 运维 多线程 网络 内存

读 Go Scheduler 有感:给产品经理的建议

Ya

程序员 产品经理 操作系统 OS Scheduler

高仿瑞幸小程序 04 小程序的全局数据

曾伟@喵先森

小程序 微信小程序 前端

Elasticsearch原理讲透了!

for

lucene elasticsearch 倒排索引 分布式搜索引擎 数据的分片和备份

Redis 命令执行过程(上)

程序员历小冰

redis 源码分析

向上管理第一项:路径P背后的目标B

kimmking

管理

Scrum精髓 - Scrum的核心到底是什么

Bob Jiang

Scrum 敏捷 Scrum精髓 敏捷精髓

时间足够爱你

rmrf

学习 思考 持之以恒

腊鸡与猴儿

黄大路

人生 小说

一个 UED 团队的自我修养

oldj

团队管理 UED

做程序员有未来吗

这小胖猫

程序员 个人成长 职业规划 技术人

理解雾计算(Fog Computing)与边缘计算(Edge Computing)

老任物联网杂谈

雾计算 Fog Computing 边缘计算 Edge Computing

深入浅出虚拟内存

helloworld

c c++ C#

关于职能型团队管理一些总结

黄大路

项目管理 管理

使用人工智能技术改进面试机器人

陆道峰

人工智能 学习 聊天机器人

每日算法之leetcode 50 Power

田镇珲

递归 LeetCode 分治

MacOS高效使用指南-我的体系化方案以及软件清单

lmymirror

高效工作 效率工具 知识管理 Mac 操作系统

直播电商行业一些看法

黄大路

互联网 商业 商业模式 商业价值 行业资讯

2021年全国大学生计算机系统能力大赛操作系统设计赛 技术报告会

2021年全国大学生计算机系统能力大赛操作系统设计赛 技术报告会

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