\\\看新闻很累?看技术新闻更累?试试下载InfoQ手机客户端,每天上下班路上听新闻,有趣还有料!
\
自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等选项。
\\Eclipse OMR项目
\\在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项目具有如下组件:
\\- 一个管理运行时堆(Heap)的垃圾回收框架,其中包括标记-清除(Mark-sweep)、分代(generational)和并行清理(parallel scavenge)垃圾回收。\\t
- 管理每个解释器和线程上下文的虚拟机API。\\t
- 用于生成本地代码(native code)的编译器。\\t
- 诊断服务,也称为“健康中心”。用于为实时诊断垃圾回收及其他运行时的细节提供帮助,并提供分析方法的能力。\\t
- 一个追踪库,有助于实现与监控工具的通信。\\t
- 一些软件库,用于端口、线程等功能,并提供一些用于平台抽象和平台运行时功能的工具。还有一个用于信号处理的软件库。\
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的更多信息,可查看:
\\- 如果想更多地了解Eclipse OMR,可访问http://www.eclipse.org/omr\\t
- 如果想根据自身对运行时的需求构建和使用Eclipse OMR,可访问https://github.com/eclipse/omr\\t
- 如果希望向团队提供反馈,可使用邮件列表omr-dev@eclipse.org\\t
- 贡献者需要在http://www.eclipse.org/legal/CLA.php处签署Eclipse CLA。\
Eclipse OpenJ9项目
\\在本文开篇处,简要地介绍了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的信息。下面列出一些有用的链接:
\\- 要下载OpenJDK with OpenJ9的二进制文件,可访问https://adoptopenjdk.net/nightly.html?variant=openjdk9-openj9。\\t
- 要参与社区,可访问https://github.com/eclipse/openj9。贡献者需要在http://www.eclipse.org/legal/CLA.php此处签署Eclipse CLA。\\t
- Eclipse OpenJ9的网站地址:https://www.eclipse/org/openj9。\\t
- OpenJ9的Docker镜像(由AdoptOpenJDK提供的每日构建版):https://dockerhub.com/adoptopenjdk/openjdk9-openj9。\\t
- 要与从事项目的人员交流并查看每周工作进展,可访问https://www.eclipse.org/openj9/oj9_whatsnew.html。\\t
- Eclipse OpenJ9 0.8发布计划:https://projects.eclipse.org/projects/technology.openj9/releases/0.8/plan。\
OpenJ9 with OpenJDK 8
\\对于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