@Rays
2018-03-03T11:46:31.000000Z
字数 3884
阅读 2188
语言开发
Java
摘要: 在2016年早期,IBM在Eclipse OMR项目中开源了J9运行时环境核心的非Java部分。OMR项目是一个与语言无关的运行时工具集。在2017年,IBM进一步以OpenJ9项目开源了J9 JVM。OpenJ9使用了Eclipse OMR项目,它本身适合于OpenJDK 9及以后版本的Java类库
作者: Monica Beckwith
正文:
自1997年以来,IBM一直致力于开发自己的JVM产品J9 JVM。J9构建为一种闭源的(自有的)JVM独立实现,其类库基于经授权的Sun实现(现在称为OpenJDK)。J9中具有多项改进,以及一些引领性的优化技术,包括:分层编译( Tiered Compilation)、共享类、逃逸分析(Escape Analysis)、一些特定于硬件的优化技术(诸如选取适当的大型页面大小)、软实时(soft realtime)垃圾回收、使用Apache Harmony和动态事前编译(AOT,ahead-of-time)的API优化,以及多种特定于对象锁的优化等。
自J9第五版以来,J9 JVM已经提供在IBM的JDK中。在Windows平台上,JDK绑定并随IBM的Websphere Application Server(WAS)交付。而在Linux、AIX、z/OS和IBM I平台上,JDK(也称为“SDK”,其中“S”指代“Software”)及相应的JRE可从IBM DeveloperWorks的“Downloads”页面下载,也可从DockerHub的https://hub.docker.com/_/ibmjava/处拉取(Pull),其中提供了包括SDK、JRE、SFJ(Small Footprint JRE)和Alpine Linux等选项。
在2016年早期,IBM在Eclipse OMR项目中开源了J9运行时环境核心的非Java部分。OMR项目是一个与语言无关的运行时工具集。关于OMR项目的更多细节,可参考项目共同牵头人Mark Stoodley博士的一个演讲幻灯片https://www.slideshare.net/MarkStoodley/omr-a-modern-toolkit-for-building-language-runtimes。
下面给出其中整体介绍OMR项目的部分幻灯页面。
对于Java,语言运行时的表示如下:
如果必须对Ruby给出类似的运行时,表示如下:
如果将Ruby替换为Python,那么运行时环境模块与Ruby类似。这样,我们清楚地看出,IBM可以将J9运行时组织为一个运行时核心组件层,正如下面的幻灯页面所示:
由此,OMR项目可以构建为一系列语言无关的运行时组件,因此可构建用于Java、Ruby、Python及其它语言的运行时。
OMR项目具有如下组件:
IBM工程师已基于OMR组件构建了一些语言的运行时和JIT编译器,其中包括:Ruby、Python、SOM++(Smalltalk)、一种称为Lua Vermelha的Lua JIT、一种用于Rosie模式语言的JIT、Swift的部分JIT、用于Base9(一种类似于JavsScript的简单运行时)和Kaleidoscope的教程JIT和运行时、一种LLVM项目使用教程语言。它们是IBM工程师在使用OMR项目构建自己的SDK for Java 8中额外实现的。
关于Eclipse OMR的更多信息,可查看:
在本文开篇处,简要地介绍了IBM的J9 JVM。J9在2016和2017年时依然是闭源的。此后,它作为一个开放管理的开源项目,被转交给了Eclipse基金会,并重命名为“OpenJ9”。这是因为IBM看到了开源社区的巨大影响力,而J9是IBM Java产品中的核心组件。IBM期望能鼓励开放社区中的开发,并最终与大型开源社区开展良好的合作。自2017年9月以来,Eclipse OpenJ9已成为一个开源项目,IBM和其它一些贡献者在项目中共同致力于推进J9 JVM。
OpenJ9使用了Eclipse OMR项目,它本身适合于OpenJDK 9及以后版本的Java类库,正如下面两页幻灯页面所示。幻灯来自于Stoodly在JavaOne 2017大会上所作的演讲,https://www.slideshare.net/MarkStoodley/javaone-2017-mark-stoodley-open-sourcing-ibm-j9-jvm。
该幻灯片中给出了更多关于使用OpenJDK with OpenJ9的信息。下面列出一些有用的链接:
对于Eclipse OpenJ9项目而言,OpenJ9 with OpenJDK 9的下载、构建和运行无疑是一个很大的成功。但是,由于Java 9的发布并非长期支持(LTS),而还有很多开发人员依然使用Java 8,很显然项目需要从OpenJDK 8移植到OpenJ9。
2017年11月,正是OpenJ9成为开源项目的短短两个月后,Eclipse OpenJ9宣布使用OpenJ9构建了OpenJDK 8(https://www.eclipse.org/openj9/oj9_build.html),并且OpenJ9 with OpenJDK 8的二进制可从AdoptOpenJDK项目网站下载:https://adoptopenjdk.net/releases.html?variant=openjdk8-openj9。
根据Eclipse OpenJ9 for Java 8文章中所说,“Eclipse OpenJ9项目使用单一代码流,在所有受支持的Java版本中实现了JVM,从Java 8到Java 9,乃至未来的版本”。通过这种单一流开发模式,Eclipse OpenJ9瞄准于尽可能为当前所有受支持的各层级JDK同时提供JVM技术进展。当然,一些JVM改进是绑定于一些语言层级上的更改,而这些更改刻意针对Java的主要版本边界。Eclipse OpenJ9将考虑到这些选择,这样编程人员可以继续依赖于他们所熟悉并偏好的某个稳固Java平台。
在该文中还引用了一个OpenJ9的性能页面,其中给出DayTrader 3应用基准测试的结果,测试中对比了OpenJDK 9 with OpenJ9和使用了HotSpot VM的OpenJDK9。
从图表中一眼看去,对于运行在OpenJ9 JVM上的大型应用而言,共享类和AOT编译策略在降低应用启动时间上作用明显。如文中此图所示:
该文还指出,即便将负载应用于系统,在提供相同性能的情况下,OpenJ9占用的内存只有使用HotSpot的OpenJDK的一半。鉴于云服务和PaaS服务部署通常是按单位时间占用内存的MB数计费,占用内存减半将可显著节省一些用例的运行费用。
查看英文原文: Eclipse Open J9 – an Open Source Java Virtual Machine Based on the Eclipse OMR Project