飞天发布时刻:2024年 Forrester 公有云平台Wave™评估报告解读 了解详情
写点什么

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

评论

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

【kafka思考】最小成本的扩缩容副本设计方案

石臻臻的杂货铺

kafka 11月月更

月日均AUM提升40倍!看这家银行如何做好网金客群分层经营?

索信达控股

科技 客户分群 网金客群

是谁的请求导致我的系统一直抛异常?

阿里巴巴云原生

阿里云 微服务 云原生

Java面试题解析:如何使用ReentrantLock的条件变量,让多个线程顺序执行?

千锋IT教育

华为阅读年度会员4折,万元好礼抢先看

叶落便知秋

5款宝藏办公软件,高质量打工人必备!

淋雨

OCR 办公软件 IDM

Karmada大规模测试报告发布:突破100倍集群规模

华为云开发者联盟

云计算 云原生 华为云 企业号十月 PK 榜

RocketMQ 在同程旅行的落地实践

Apache RocketMQ

消息队列 Apache RocketMQ

云原生时代数据库技术趋势与场景选型

OceanBase 数据库

快速实现无人车远程控制开发——实践类

阿里云AIoT

阿里云 物联网 远程控制

深圳区块链DAPP程序开发未来发展简介

W13902449729

dapp开发

最佳实践|用腾讯云AI图像能力实现AI作画

牵着蜗牛去散步

腾讯云 腾讯 AI

区块链DAPP开发成本差别如此之大?深圳区块链公司告诉你

W13902449729

dapp dapp开发 区块链开发

【网易云信】网易云信 toB 质量保障体系实践

网易智企

质量保障 PaaS平台

钉钉全栈化实践总结-前端篇

阿里技术

前端 钉钉 全栈

鱼传科技:函数计算,只要用上就会觉得香

阿里巴巴云原生

阿里云 云原生 函数计算

Hexo框架+Github 搭建免费静态博客教程(一)

程序员余白

Hexo Github' 博客搭建 11月月更

Hexo+Github搭建个人博客教程(二)

程序员余白

Hexo 博客搭建 11月月更

MSE 结合 Dragonwell,让 Java Agent 更好用

阿里巴巴云原生

阿里云 微服务 云原生

文档管理系统平台:实现文档管理现代化

Baklib

腾讯蓝鲸 API 网关如何借助 APISIX 实现产品升级与业务完善

API7.ai 技术团队

云原生 API网关 APISIX 客户案例

无脚本自动化测试

FunTester

“工程化”对于大型数据平台而言,意味着什么?新一届StartDT Hackathon来了

奇点云

数据平台 奇点云

管控内部威胁,数据如何安全使用?

极盾科技

数据安全

butterfly美化日记(一)

程序员余白

Hexo butterfly 博客配置 11月月更

如何解决产品知识培训问题?

Baklib

记一次多个Java Agent同时使用的类增强冲突问题及分析

华为云开发者联盟

开发 华为云 企业号十月 PK 榜

复杂A/B实验如何设计?火山引擎DataTester帮你落地!

字节跳动数据平台

大数据 数据 火山引擎 A/B测试

网易云信 toB 质量保障体系实践

网易云信

质量保障 PaaS平台

什么是入侵检测系统?有哪些分类?

wljslmz

网络安全 11月月更 入侵检测 IDS

大咖分享 | 如何构建 Alluxio 审计日志分析系统

Alluxio

分布式 Alluxio 大数据 开源 数据编排 审计日志

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