openj9
Posted lnlvinso
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了openj9相关的知识,希望对你有一定的参考价值。
下面部分转自:https://www.jianshu.com/p/916b5fcd0140
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,
从这些测试结果中,与Hotspot相比OpenJ9有如下的优势:
1)启动时的内存占用减少了66%
2)负载稳定后的内存占用减少了63%
3)启动时间缩短了42%
4)吞吐量相近
5)在CPU受限的环境中能更快的达到最大吞吐量
在 Java 的世界中,大多人都熟悉 OpenJDK。这是一个完全的 JDK 实现,包括对 HotSpot JVM 引擎的实现。不是很多开发者了解或尝试选择 HotSpot。询问周围的同事后,他们都记得 JRockit 这个名字,但没有人提起 IBM J9 及(或) Eclipse OpenJ9。
我已经了解到了 OpenJ9 擅长于内存管理,而且在云/容器中的使用上已经经过了精简。OpenJ9 是一个独立的对 JVM 的实现。它源于 IBM 的 Java SDK/IBM J9,它的历史能追溯到 OTI Technologies Envy Smalltalk(感谢 Dan Heidinga!)。
随着微服务使用率的提升(而且 Java 中的大多数服务都不是特别小)。我认为它将会再次变成一个热门话题!
下面部分转自: https://www.jianshu.com/p/621ca456822f
OpenJ9主要有如下几个组件组成:
1)Class loader:类加载器
2)Interpreter:解释器,负责解释字节码
3)Platform port library layer:操作系统和JVM直接的抽闲层
4)Garbage collector (GC):垃圾回收器
5) Just-In-Time (JIT) compiler (codenamed Testarossa or TR JIT in J9):及时编译器
6) JVM Application Programming Interface (API):应用编程接口
7) Monitoring and Diagnostic component:监控诊断组件
如下图所示:
类加载器和解释器是JVM的基本组件,通常从应用程序启动时就开始执行,而 平台端口库层提供JVM和底层操作系统之间的抽象层,允许在代码库中的一个位置管理大部分平台特定的细节,如文件I / O和内存分配。
openJ9 VM可以配置许多不同的Java类库(JCL)版本,以生成不同版本的IBM SDK for Java,这样就可以在OpenJ9的JVM上支持java8.0,9.0和10
以上是关于openj9的主要内容,如果未能解决你的问题,请参考以下文章