【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

OpenJDK 提议 Galahad 项目合并 GraalVM 的原生编译

  • 2023-01-10
    北京
  • 本文字数:1891 字

    阅读完需:约 6 分钟

OpenJDK提议Galahad项目合并GraalVM的原生编译

OpenJDK提出了一个新的项目 ,代号为 Galahad,以便于将 GraalVM 社区版代码库中的一部分功能合并到 OpenJDK 中。


这是一项长期努力的最新进展,也就是在程序执行之前将 Java 应用编译为机器码的能力。乍看上去,这似乎有些奇怪,毕竟,一位新的 Java 开发人员最先了解到的一点就是“Java 不会编译成机器码,而是编译成 JVM 字节码”。


这句简单的格言有着深远的影响,其中最基础的就是,Java 平台依赖一个强大的运行时来执行,也就是 JVM。这个运行时实现了动态运行技术,比如类加载和反射,这些技术在提前编译(ahead-of-time,AOT)语言中并没有真正类似的特性。实际上,这是 Java 强大功能的起点,也是 Java 能够在 25 年左右的时间内一直位于软件舞台中央的重要原因。


尽管如此,人们始终对 Java 程序直接编译为机器代码并在没有 JVM 情况下独立运行的可能性抱有强烈的兴趣。这种期望有多种原因,比如为了减少 Java 程序达到峰值性能的时间,减少 Java 应用的内存需求,甚至只是为了避免将资源用到应用本身并不需要的运行时子系统中。


迄今为止,已经有多个项目尝试实现这种可能性。最近的一个,也可以说是到目前为止最成功的一个,就是 GraalVM 项目。这个项目并不是来自 OpenJDK,而是来源于 Oracle Labs 的一个研究性项目。它的第一个生产级别的版本 GraalVM 19.0 是在 2019 年 5 月份发布的。


从那时起,它一直作为一个独立项目来运作,具有与 OpenJDK 不同的发布周期,并且与 OpenJDK 的互动有限。在为数不多的 Java 增强提案(Java Enhancement Proposal,JEP)中,有两个是与 GraalVM 相关的:


这两个 JEP 都是在 Java 9 中出现的,它们一起将 Graal 编译器引入到了 OpenJDK 代码库中。


Graal 编译器是 GraalVM 的主要组件之一,它是一个操作 Java 字节码并生成机器码的编译器,可以在 JIT 或 AOT 模式下运行。在 JIT 模式下,它可以用来代替 C2(有时被称为“服务器编译器”)。值得注意的是,Graal 本身是用 Java 编写的,不像其他用于 JVM 的 JIT 编译器都是用 C++编写的。


在 Java 10 中,Graal 凭借JEP 317作为实验性的、基于 Java 的 JIT 编译器添加了进来。但是,在 Java 17(2021 年 9 月发布)中,AOT 和 JIT 编译器的实验性形式都被移除掉了。尽管如此,实验性的 Java 级 JVM 编译器接口(JVMCI)被保留了下来,因此,我们仍然可以使用外部构建的 Graal 编译器版本进行 JIT 编译。


如果最新的公告能够如期交付,将标志着 Graal 重新回到了 OpenJDK 代码库中。然而,更重要的也许是 GraalVM 流程和项目的变化。Galahad 将作为 OpenJDK 的一个子项目来运作,并维护单独的仓库,定期与主线仓库进行 rebase 操作。当功能就绪时,它们将被迁移到主线仓库。这与长期运行的成功项目(如 Loom 和 Lambda)所使用的模式是相同的。


Galahad 将 JDK 20 作为初始基线。这基本上就是代码和技术的起点而已,因为JDK 20已经进入了Rampdown阶段,所以至少在 JDK 21(预计 2023 年 9 月)之前,不可能有任何重新引入的 Graal 代码作为 Java 的一部分交付。目前,Galahad 将专注于贡献最新版本的 GraalVM JIT 编译器,并将其作为 C2 的替代方案进行集成。稍后,一些必要的 AOT 编译技术将被加入进来,以便于 Graal JIT 编译器在 JVM 启动时立即可用。


这是必要的,因为 Graal 本身就是用 Java 编写的,它可能会遭受我们广泛面临的启动缓慢问题:

  • Hotspot 基于 C1 编译器和 Graal(如果可用的话)启动;

  • Graal 会在 Java 解释器线程上执行,最初速度会很慢,直到它自己得到了编译。


将 Graal 编译器预编译为原生代码有可能会解决这个问题,有一个旧的JEP草案提出了这种方式,但是目前还不知道它是否会被恢复或重新开始寻找新的方案。


需要注意的是,并不是所有的 GraalVM 代码库都会被提交至 OpenJDK,它只包含核心的 JIT 和 AOT 组件,以及原生镜像工具。甲骨文公司在 GralVM 企业版中的专有特性预计不会捐献给该项目。


Galahad 在项目之初就有一个值得关注的提交者名单,他们不仅来自甲骨文的 OpenJDK 和 GraalVM 团队,还有来自更广泛的 OpenJDK 社区的许多贡献者,包括来自 Red Hat 的 Andrew Dinn 和 Dan Heidinga 以及来自 AWS 的 Roman Kennke。Galahad 和 Leyden 项目(另一个研究 AOT 编译和相关技术的 OpenJDK 项目)之间的确切关系尚不清楚,但 Galahad 的一些贡献者也一直活跃在 Leyden 中。


尽管该项目仍处于早期阶段,但许多有影响力的社区成员对 Galahad 表示欢迎,认为它代表了在保持 Java 处于云原生技术栈的领先地位方面,这是一项重要的进展。


原文链接:

OpenJDK Proposes Project Galahad to Merge GraalVM Native Compilation


相关阅读:

Oracle 将 GraalVM 贡献给 OpenJDK,以解决“采用障碍”

标准化原生Java:拉近GraalVM和OpenJDK的距离

2023-01-10 11:218136

评论

发布
暂无评论
发现更多内容

跬步贴|5分钟搞定缓存击穿问题

架构师跬步营

Arthas安装及基本用法

编程随想曲

Java

从“成为作者”到“立即创作”:开启你的“写作极客”生活

岛乾坤

写作

Hadoop集群搭建-01前期准备

虚拟世界的懒猫

hadoop hdfs mapreduce zookeeper centos

Hadoop集群搭建-03编译安装hadoop

虚拟世界的懒猫

hadoop centos7

我愿沉迷于学习,无法自拔(一)

孙瑜

深度思考 个人成长

和邓小平、基辛格“谈笑风生”的世界第一女记者:奥琳亚娜·法拉奇

赵新龙

记者 编辑 采访 法拉奇

程序员陪娃漫画系列——喂药

孙苏勇

程序员 生活 陪伴 漫画

Hadoop集群搭建-04安装配置HDFS

虚拟世界的懒猫

hadoop

安装VMware16兼容Hyper-v+WSL2+Docker+解决0x80370102报错

虚拟世界的懒猫

Docker vmware vm hyper-v WSL2

你真的理解 Java 的基础数据类型吗

Rayjun

Java

机器学习中常用的处理手段

子夜2104

学习

centos6搭建NEXUSphp pt私人种子站

虚拟世界的懒猫

centos nexusphp pt bt

idea+spring4+springmvc+mybatis+maven实现简单增删改查CRUD

虚拟世界的懒猫

spring mybatis ssm springmvc java8

Day 47|Week 07-5 曾国藩家书|问学篇-学问何处何时都可做

熊小北同学

做好仓储控制系统(WCS)的关键

申扬科技

仓储控制系统 WCS

配置微软Azure大数据HDInsight云集群

虚拟世界的懒猫

microsoft 大数据 微软 azure hdinsght

下一代存储NVMe over Fabrics

HU

Zookeeper选举机制

tunsuy

zookeeper 开源 源码分析 分布式协同

当 Redis 发生高延迟时,到底发生了什么

程序员历小冰

redis Linux 延迟

Hadoop集群搭建-02安装配置Zookeeper

虚拟世界的懒猫

hadoop zookeeper centos7

利用Translate ToolKit 2.5.0 API构建Flask web app

虚拟世界的懒猫

Python nginx flask uwgsi translate

如何无缝的将Flutter引入现有应用?

稻子

flutter ios android 开源 移动应用

1分钟就能学会的时间管理大法

小匚

时间分配 时间管理

管理信息系统课程基础知识

小匚

Hadoop集群搭建-05安装配置YARN

虚拟世界的懒猫

hadoop

如何写作一本书(2):前言与正文

英子编辑

技术 写作

“我代码写完了,QA可以测了。”

蔡建斌

Scrum 敏捷 质量管理 测试

消息队列Kafka - Kafka中的选举

Java收录阁

kafka

选赵敏还是选小昭,这可真是个问题 | Decision Tree

张利东

Python 学习 算法 决策树

【终于解决】ubuntu19安装nvidia驱动后屏幕亮度默认最亮不可调节

虚拟世界的懒猫

ubuntu 英伟达

OpenJDK提议Galahad项目合并GraalVM的原生编译_语言 & 开发_Ben Evans_InfoQ精选文章