当前位置: 首页 > news >正文

Eclipse Open J9:Eclipse OMR项目提供的开源JVM

\

看新闻很累?看技术新闻更累?试试下载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,语言运行时的表示如下:

\\

6b8dad9975ed676c618a9bd0e2ef7126.png

\\

如果必须对Ruby给出类似的运行时,表示如下:

\\

536bb6a2fbbef03cbfd6c8a55febc3d8.png

\\

如果将Ruby替换为Python,那么运行时环境模块与Ruby类似。这样,我们清楚地看出,IBM可以将J9运行时组织为一个运行时核心组件层,正如下面的幻灯页面所示:

\\

e54bbe16499e75c0aa1045017e027e88.png

\\

由此,OMR项目可以构建为一系列语言无关的运行时组件,因此可构建用于Java、Ruby、Python及其它语言的运行时。

\\

OMR项目具有如下组件:

\\
  • 一个管理运行时堆(Heap)的垃圾回收框架,其中包括标记-清除(Mark-sweep)、分代(generational)和并行清理(parallel scavenge)垃圾回收。\\t
  • 管理每个解释器和线程上下文的虚拟机API。\\t
  • 用于生成本地代码(native code)的编译器。\\t
  • 诊断服务,也称为“健康中心”。用于为实时诊断垃圾回收及其他运行时的细节提供帮助,并提供分析方法的能力。\\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。

\\

bd5fdb67dcc886448d44e6c869fb5496.png

\\

efb9c4b95553a2a1b6f7a2a44eb592d1.png

\\

该幻灯片中给出了更多关于使用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编译策略在降低应用启动时间上作用明显。如文中此图所示:

\\

c61f663c085859025e608571ae0aa2fd.png

\\

该文还指出,即便将负载应用于系统,在提供相同性能的情况下,OpenJ9占用的内存只有使用HotSpot的OpenJDK的一半。鉴于云服务和PaaS服务部署通常是按单位时间占用内存的MB数计费,占用内存减半将可显著节省一些用例的运行费用。

\\

查看英文原文: Eclipse Open J9 – an Open Source Java Virtual Machine Based on the Eclipse OMR Project

相关文章:

  • MySQL优化Explain命令简介(一)
  • HDOJ 4455 Substrings 递推+树状数组
  • 雨果奖得主刘慈欣(《三体》作者)如何看待人工智能?
  • 《Raw Data》正式登录Oculus,跨平台对战已成VR游戏主要发展方向
  • Nginx的配置使用
  • spark2.1:flatMap的用法
  • java容器类1:Collection,List,ArrayList,LinkedList深入解读
  • 做一名精致的JavaScripter 01:JavaScript简介
  • Hibernate【inverse和cascade属性】知识要点
  • IE安全系列之——昨日黄花:IE中的ActiveX(I)
  • 管道符和作业控制,shell变量和环境变量配置文件
  • Hadoop发行版某厂商发布TPC-DS评测结果
  • node.js中npm安装的模块在哪个目录下
  • AMD和英伟达区块链的闸门已然开启 投资者兴奋不已
  • 大话爬虫的实践技巧
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【技术性】Search知识
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • Android系统模拟器绘制实现概述
  • Angular 2 DI - IoC DI - 1
  • CentOS7 安装JDK
  • CSS魔法堂:Absolute Positioning就这个样
  • mongo索引构建
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • python学习笔记 - ThreadLocal
  • 我有几个粽子,和一个故事
  • 小程序开发之路(一)
  • Linux权限管理(week1_day5)--技术流ken
  • "无招胜有招"nbsp;史上最全的互…
  • #、%和$符号在OGNL表达式中经常出现
  • #pragma multi_compile #pragma shader_feature
  • (1)SpringCloud 整合Python
  • (C语言)字符分类函数
  • (ZT)薛涌:谈贫说富
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (三十五)大数据实战——Superset可视化平台搭建
  • (五)网络优化与超参数选择--九五小庞
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转)setTimeout 和 setInterval 的区别
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .Net的DataSet直接与SQL2005交互
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • []Telit UC864E 拨号上网
  • [4.9福建四校联考]
  • [Android 数据通信] android cmwap接入点
  • [APIO2015]巴厘岛的雕塑
  • [BSGS算法]纯水斐波那契数列
  • [Electron]ipcMain.on和ipcMain.handle的区别
  • [element-ui] el-dialog 中的内容没有预先加载,因此无法获得内部元素的ref 的解决方案
  • [Java基础]—JDBC
  • [Kubernetes]8. K8s使用Helm部署mysql集群(主从数据库集群)