下面部分转自: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:监控诊断组件

  如下图所示:

                            OpenJ9架构图

类加载器和解释器是JVM的基本组件,通常从应用程序启动时就开始执行,而 平台端口库层提供JVM和底层操作系统之间的抽象层,允许在代码库中的一个位置管理大部分平台特定的细节,如文件I / O和内存分配。

openJ9 VM可以配置许多不同的Java类库(JCL)版本,以生成不同版本的IBM SDK for Java,这样就可以在OpenJ9的JVM上支持java8.0,9.0和10

openj9的更多相关文章

  1. java垃圾回收及gc全面解析(全面覆盖cms、g1、zgc、openj9)

    一般来说,gc的停顿时间和活跃对象的堆大小成比例,视gc线程的数量,每1GB可能会停顿1-3秒,且cpu数量通常和gc呈现阿姆达尔定律(Amdahl’s Law),而非我们直观计算的线性变化.如下: ...

  2. linux非常用但很有用的命令

    查找指定目录下包含指定字符串的所有文件 grep -rl 'abc' / top查看命令的完整启动路径 top 按c top以MB为单位显示内存信息 top -M 查看内存top io趋势 pidst ...

  3. 深入浅出解读 Java 虚拟机的差别测试技术

    本文分享基于字节码种子生成有效.可执行的字节码文件变种,并用于 JVM 实现的差别测试.本文特别提出用于修改字节码语法的classfuzz技术和修改字节码语义的classming技术.上述变种技术系统 ...

  4. 容器中的JVM资源该如何被安全的限制?

    前言 Java与Docker的结合,虽然更好的解决了application的封装问题.但也存在着不兼容,比如Java并不能自动的发现Docker设置的内存限制,CPU限制. 这将导致JVM不能稳定服务 ...

  5. [转]awsome-java

    原文链接 Awesome Java A curated list of awesome Java frameworks, libraries and software. Contents Projec ...

  6. java不常用但很有用的问题排查工具(持续完善)

    因为用的频率不是很多,老忘掉,每次都要搜下,特记录下备忘. 查看进程的启动jvm选项 [root@iZ23nn1p4mjZ ~]# jinfo -flags 16603Attaching to pro ...

  7. 容器内部设置JVM的Heap大小

    容器内部利用脚本来获取容器的CGroup资源限制,并通过设置JVM的Heap大小. Docker1.7开始将容器cgroup信息挂载到容器中,所以应用可以从 /sys/fs/cgroup/memory ...

  8. Java 11 将至,不妨了解一下 Oracle JDK 之外的版本

    Java 11 计划于本月,即 9 月 25 日发布.与 Java 10 不同,Java 11 不仅提供了长期支持,还将作为 Java 平台的参考实现.新的长期支持版本每三年发布一次,根据后续的发布计 ...

  9. linux不常用但很有用的命令(持续完善)

    Linux登录后设置提示信息: /etc/issue 本地端登录前显示信息文件 /etc/issue.net 网络端登录前显示信息文件 /etc/motd 登陆后显示信息文件 可以添加以下几个常用选项 ...

随机推荐

  1. C# socket通讯 send方法记录

    由于本人是Java入门的开发,在C#开发中遇到的问题,在此记录一下: 1.client端的send方法不管发送出去没发送出去,总是显示发送出去. 查资料得知,send方法是将数据发送到缓存区,并不是直 ...

  2. calc()

    什么是calc()? 学习calc()之前,我们有必要先知道calc()是什么?只有知道了他是个什么东东?在实际运用中更好的使用他. calc()从字面我们可以把他理解为一个函数function.其实 ...

  3. React native中DrawerNavigator,StackNavigator,TabNavigator导航栏使用

    import React from 'react'; import { View, Text,Button } from 'react-native'; import { DrawerNavigato ...

  4. JVM学习一:JVM运行时数据区

    注:此图适合JDK 7之前的版本,JDK 8开始增加了元数据空间,内存区结构有所变化(JDK 7将字符串常量池移除了永久代,JDK 8去永久代,迎元数据空间metaspace) 1.程序计数器:程序计 ...

  5. python 异步发送邮件 aiosmtplib

    aiosmtplib is an asynchronous SMTP client for use with asyncio.文档地址 与 smtplib的用法大体相同 有几个地方需要注意下: 加密S ...

  6. 64位ubuntu16.04系统安装tensorflow_cpu

    ubuntu16.04安装tensorflow_cpu 一.安装anaconda: ①.下载anaconda包:Anaconda3-5.2.0-Linux-x86_64.sh 这是python3.6. ...

  7. angular 实现左侧和顶部固定定位布局

    1 布局基于angular ng-zorro组件库实现 由于项目中使用了组件库并且要求响应式布局,卡在这个坑上两天,多次调试后终于解决 代码仅供参考,由于没有上传依赖的库和组件包无法直接运行,提供代码 ...

  8. 锋利的jQuery初学(3)

    jQuery详细介绍 1,$的含义:就是一个名称符号:jquery占用了两个变量:$和jquery; 2,js与jQuery的入口函数区别 (1),js的window.onload事件是等到所有内容加 ...

  9. Android自定义标签列表控件LabelsView解析

    版权声明:本文为博主原创文章,未经博主允许不得转载. 无论是在移动端的App,还是在前端的网页,我们经常会看到下面这种标签的列表效果:   标签从左到右摆放,一行显示不下时自动换行.这样的效果用And ...

  10. Zend studio快捷键使用

    应用场景 快捷键 功能 查看快捷键 ctrl+shift+l 显示所有快捷键列表 查看和修改快捷键   打开Window->Preferences->General->keys 修改 ...