写点什么

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:218353

评论

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

金九银十前端面试题总结(附答案)

loveX001

JavaScript

React组件之间的通信方式总结(下)

beifeng1996

React

开源无国界,从openEuler Maintainer到Spark Committer的贡献开源之路

openEuler

spark 开源 openEuler

PriorityQueue源码-成员变量解析

知识浅谈

Priority Queue 10月月更

使用Mask R-CNN模型实现人体关键节点标注

华为云开发者联盟

人工智能 华为云 mask 企业号十月 PK 榜

面向对象思想和Java中类的定义

共饮一杯无

Java 面向对象 10月月更

JVM诊断工具中的深堆、浅堆、支配树,你都明白吗

JAVA旭阳

Java JVM 10月月更

React循环DOM时为什么需要添加key

beifeng1996

React

腾讯云继续加码布局云原生,将披露全新产品战略

科技热闻

给 SAP BTP 创建的 Java 应用添加 Custom Event Handler 支持创建功能

汪子熙

spring 云原生 Cloud SAP 10月月更

【LeetCode】合并两个有序链表Java题解

Albert

算法 LeetCode 10月月更

深度解析:智能合约DAPP(bsc)币安链系统项目开发解决方案

I8O28578624

阿里内部最新发布的并发图册+JDK源码速成笔记,终于解脱束缚了

Geek_0c76c3

Java 源码 程序员 JVM 开发

80%的前端开发都答不上来的js异步面试题

loveX001

JavaScript

为什么编程第一课都要学Hello World?

博文视点Broadview

react高频面试题自测

beifeng1996

React

SAST + SCA: 结合使用安全升级

SEAL安全

SCA 安全测试 攻击 SAST 应用安全测试

国产分布式数据库发展趋势与难点

亚信AntDB数据库

AntDB 国产数据库 AntDB数据库 企业号十月PK榜 企业号十月 PK 榜

资源成本降低80%!Serverless云函数的弹性架构实践

Geek_2d6073

自制操作系统系列(三):加载其他文件执行

操作系统

华为云确定性运维,为政务云平台稳定可靠运行保驾护航

华为云开发者联盟

云计算 华为云 政务云 企业号十月PK榜

数据中台选型前必读:数据中台与大数据平台有什么区别

雨果

数据中台 大数据平台

聚焦六大典型应用场景,博云金融行业容器解决方案更新发布!

BoCloud博云

云计算 云原生 容器云

Python进阶(二十)Python爬虫实例讲解

No Silver Bullet

Python 数据分析 10月月更

Java对象的使用和对象内存图解

共饮一杯无

Java 对象 10月月更

带你认识JDK8中超nice的Native Memory Tracking

华为云开发者联盟

开发 华为云

以太坊质押时代到来,开发者机遇何在?

TinTinLand

区块链 以太坊 开发者 质押挖矿

分享一个好问题:企业为什么要区分数据中台和数据平台?

雨果

数据中台 大数据平台

流程引擎的架构设计

京东科技开发者

架构设计 报表 workflow BPM 流程引擎

数字化背景下,低代码发展的动力和阻力

飞算JavaAI开发助手

22道js输出顺序问题,你能做出几道

loveX001

JavaScript

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