第2章 OpenJ9介绍
OpenJ9,OMR与OpenJDK
Eclipse OpenJ9 是一个 Java 虚拟机(JVM),它是运行 Java 应用程序的引擎,而 OpenJDK 是一个完整的开发工具包,包含其他组件,如Java 类库以及 JVM。默认情况下,OpenJDK 使用名为 Hotspot 的 JVM。简单地说,OpenJ9 是一个 JVM 替代方案,可将其作为 OpenJDK 二进制文件的一部分。
而OpenJ9其自身是基于IBM开源的OMR项目所构建,OMR项目由一个高度集成的开放源码C和c++组件,可用于构建大量的语言,运行时支持许多不同的硬件和操作系统平台。这些组件包括但不限于:内存管理,线程处理,平台端口(抽象)库,诊断支持,监控支持,垃圾收集和本地实时编译。OMR的意图在于让实现语言的人能够重用IBM在Java运行时方面所投入的数百开发人年所取得的成果,能够受益的包含已有的语言如Ruby、Python、Javascript等等,它还能加快新语言的创建过程。
OpenJ9,OMR和OpenJDK的关系如下图所示:
在上图中,箭头起点表示了上游的开源项目,而这点可以通过运行java -version的输出可以看到,如下:
openjdk version "1.8.0_162"
OpenJDK Runtime Environment (build 1.8.0_162-b12)
Eclipse OpenJ9 VM (build openj9-0.8.0, JRE 1.8.0 Linux amd64-64 Compressed References 20180315_120 (JIT enabled, AOT enabled)
OpenJ9 - e24e8aa9
OMR - 3e8296b4
JCL - ee1e77df1d based on jdk8u162-b12)
OpenJ9的性能测试
让我们来看看OpenJ9给出官方测试结果,在测试中所使用的负载是daytrader7这个基准测试项目,其地址是:https://github.com/wasdev/sample.daytrader7,它是一个围绕在线股票交易系统范例构建的应用程序,该应用程序允许用户登录,查看其投资组合,查询股票报价以及买入或卖出股票股票;借助基于Web的加载驱动程序(如Apache JMeter),DayTrader提供的实际工作负载可用于衡量和比较各种供应商提供的Java平台企业版(Java EE)应用程序服务器的性能。除了完整的工作负载之外,应用程序还包含一组用于各种Java EE组件和通用设计模式的功能和性能测试的原语。 DayTrader的新设计涵盖Java EE 7,包括新的WebSockets规范。其他Java EE特性包括JSP,Servlet,EJB,JPA,JDBC,JSF,CDI,Bean验证,JSON,JMS,MDB和事务(同步和异步/两阶段提交)。
其性能的测试结果查看:https://www.eclipse.org/openj9/oj9_performance.html#g1,其测试结果如下图所示:
1)启动后的内存消耗
2)在负载压力平稳后的内存消耗
3)系统启动耗时
4)吞吐量
5)在CPU受限环境中的测试
小结
从这些测试结果中,与Hotspot相比OpenJ9有如下的优势:
1)启动时的内存占用减少了66%
2)负载稳定后的内存占用减少了63%
3)启动时间缩短了42%
4)吞吐量相近
5)在CPU受限的环境中能更快的达到最大吞吐量