写点什么

Oracle 推出 GraalVM Java JIT 编译器,但仅限于自己的 JDK

作者:Karsten Silz

  • 2024-12-25
    北京
  • 本文字数:2371 字

    阅读完需:约 8 分钟

Oracle 推出 GraalVM Java JIT 编译器,但仅限于自己的 JDK

2024 年 9 月,甲骨文公司在其 OpenJDK 发行版 Oracle JDK 23 中添加了一项实验性功能 GraalVM JIT 编译器。GraalVM JIT 编译器比标准 OpenJDK JIT 编译器更快,也更易于维护。甲骨文的这一举动引起了争议,因为他们曾研究过将 GraalVM JIT 编译器纳入所有 OpenJDK 发行版,而不仅仅是他们自己的发行版。这项研究的状态目前尚未可知。


Java 需要 JIT 编译器,因为 HotSpot JVM 会在运行时解释与机器无关的 Java 字节码。与 C++ 等语言相比,这个过程要慢得多,因为 C++ 的超前(AOT)编译器会在构建时创建机器代码。在 Java 中,JIT 编译器会在运行时将常用方法(“热点”)的字节码转换为机器代码。


GraalVM JIT 编译器是 Oracle 实验室项目 GraalVM 的成果之一。这是一个面向 Java、JavaScript、Python 和 Ruby 等 JVM 语言的高性能运行时。GraalVM JIT 编译器可以在名为 HotSpot JVM 的标准 OpenJDK 虚拟机中运行。此外,它也可以在 GraalVM JDK(基于 Oracle JDK 的 Java 发行版)中运行。


标准 OpenJDK HotSpot JIT 编译器是一个由 C1 和 C2 编译器组成的分层编译器。这两种编译器都是用 C++ 编写的,并且自 2000 年以来就一直是默认的编译器。与 HotSpot 相比,GraalVM JIT 编译器有一些技术优势,而且是用 Java 编写的,比 C1 和 C2 的 C++ 代码更易于维护。甲骨文发现,使用 GraalVM JIT 编译器运行其云业务软件 NetSuite 时,CPU 消耗一般可降低 6-7%,在某些工作负载中可降低 13%。


GraalVM 还有一个 Java 编译器:本地镜像 AOT 编译器,它将编译和尽可能多的初始化工作转移到构建时。它生成的本地可执行文件可立即启动,并且没有 JIT 编译器。甲骨文表示,借助性能分析引导优化(PGO),本地镜像的峰值性能接近 JIT 编译器,在某些情况下甚至超过了 JIT 编译器。


使用 GraalVM 本地镜像的代价是,可能会出现一些对大多数 Java 应用程序没有影响的限制,而且故障排查的成本会增加不少。多年来,Helidon、Micronaut、Quarkus 和 Spring Boot 等应用程序框架一直都支持 GraalVM 本地镜像。有些库,尤其是比较老的库,并没有提供开箱即用的支持,但通常只要补充下本地镜像的配置数据,就能正常工作。


甲骨文于 2022 年 12 月提出了 OpenJDK 项目 Galahad。其目标是将 GraalVM JIT 编译器和 GraalVM 本地镜像 “贡献给 OpenJDK 社区,并为可能在 JDK 主线版本中孵化它们做好准备”。该项目已于 2023 年初获得批准,但此后几乎没有任何公开活动。


今年 6 月,甲骨文公司的 Douglas Simon 表示:“Galahad 项目的目标是使 GraalVM 项目与 OpenJDK 和 Oracle JDK 更好地保持一致。Galahad 主要是为了协调两个团队之间的开发流程,应该不会对 GraalVM 发行版中用户可见的功能产生任何重大影响”。截至 2024 年 11 月,关于 Galahad 项目是否会导致 GraalVM JIT 和 AOT 编译器被纳入未来的 OpenJDK 主线版本,以及何时纳入,均没有明确的消息。目前,也没有明确的消息说明 OpenJDK 主线中的 GraalVM JIT 编译器与 Oracle OpenJD 发行版中的 GraalVM JIT 编译器有何不同。


InfoQ 曾向甲骨文公司咨询过相关问题,但甲骨文公司并未给予答复。


Azul Systems 公司副首席技术官 Simon Ritter 很高兴地回答了有关 JIT 编译器的问题。

InfoQ:大多数 OpenJDK 发行版都附带了 HotSpot C1 和 C2 JIT 编译器。根据您的经验,哪些 Java 应用程序在哪些情况下会受益于不同的 JIT 编译器?


Simon Ritter: 要明确地回答这个问题很难。JIT 编译器的作用是在运行时将 Java 字节码转换为本地机器指令。与单纯解释字节码相比,这样做的好处是大大提高了应用程序的性能。


作为 HotSpot 虚拟机的一部分,C1 和 C2 JIT 编译器早在 JDK 1.2 版本中就已引入,为的是解决 Java 运行速度慢的问题。使用 C1 快速编译代码立即就可以获得性能的提升。之后,使用 C2 重新编译代码,根据收集到的性能分析数据生成最优的本地指令。


替换 C2 可以生成优化程度更高的本地指令,从而提高应用程序的性能。在很大程度上,提升程度取决于代码的实际操作。如果应用程序比较简单,则不太可能有任何性能上的改进,而如果应用程序比较复杂,比如数值密集型应用程序,则可能会有很大的性能提升。归根结底,最好的方法是测试各种替代方案,并确定哪种方案最适合您的应用程序。

InfoQ:Azul 销售的 Prime OpenJDK 发行版包含 Falcon JIT 编译器。Falcon 是如何工作的?


Ritter:Falcon 是 C2 JIT 编译器的替代品,基于开源的 LLVM 编译器项目。LLVM 是可重用模块化编译器和工具链技术的集合。它的大部分工作是将编译生成的代码的中间表示与性能分析数据相结合,生成最优的本地机器指令。利用这一点,Azul 将其集成到了 JVM 中,与垃圾收集器、类加载器等协同工作。这项工作随后又被贡献给了 LLVM 项目。


使用 LLVM 进行 JIT 编译可以获得不同的性能特征。它使用的技术包括更激进的推测优化和更好的自动矢量化,仅举两例。通常,这能带来两位数的性能提升。

InfoQ:与 C2 和 GraalVM JIT 编译器相比,Falcon JIT 编译器怎么样?


Ritter:C2 是 1998 年推出的,其设计是一体的,很难通过修改来提高性能。Falcon 基于 LLVM,它是模块化的,添加新的编译功能要容易得多。


Graal JIT 编译器是用 Java 编写的。同样,修改代码生成方式和改进优化都更简单。目前,Graal JIT 编译器并未包含在 OpenJDK 中,而仅在 Oracle JDK 中作为实验性功能提供。

InfoQ:与其他语言的 JIT 编译器相比,如.NET 或 JavaScript,Java JIT 编译器有什么优势吗?


Ritter: 这个问题也很难给出一个明确的答案。我能想到的最好的回答是,与.NET 和 JavaScript 相比,基于 JVM 的应用程序在服务器端更受欢迎。JVM 具有令人难以置信的可扩展性和健壮性,这也是几乎所有企业关键任务应用程序都选择这一平台的原因。


查看原文链接:

https://www.infoq.com/news/2024/12/oracle-jdk-graalvm-jit-compiler/

2024-12-25 08:059658

评论

发布
暂无评论

云原生数据库 GaiaDB 支持新的管理工具啦

Baidu AICLOUD

云原生数据库

CodeFuse开源ModelCache

百度开发者中心

深度学习 大模型 人工智能、

MO干货 | shuffle执行计划解析(上篇)

MatrixOrigin

数据库 云原生 分布式,

开篇语 | 容器中的⼤模型 (LLM in Containers)

智领云科技

容器 大模型

开源与自研的选择

流氓兔

开源 数字化转型 技术选型 软件研发 自主研发

扬帆启航!携手飞桨get开源贡献新技能!

飞桨PaddlePaddle

百度 开发者 开源社区 百度飞桨

Java IDEA 插件新升级,帮助生成 API 文档

Apifox

Java IDEA Apifox 接口文档 API

多任务一次搞定!selenium自动化复用浏览器技巧大揭秘

霍格沃兹测试开发学社

金三银四,聊一聊软件测试简历书写/面试的必备技能

测试人

面试 软件测试 简历 测试开发

如何做代币分析:以 CRO 币为例

Footprint Analytics

Token

流行 NFT 的必备指南

Footprint Analytics

NFT

2024年2月NFT市场激增:NFT趋势、热门项目和市场分析

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

实例详解如何构建动态SQL语句

华为云开发者联盟

数据库 后端 华为云 华为云GaussDB 华为云开发者联盟

大模型时代下的视觉识别任务

百度开发者中心

人工智能 图像处理 图像 大模型

LangChain与Chroma的大模型语义搜索应用

百度开发者中心

人工智能 深度学习 大数据 大模型

模型驱动测试:引领软件质量的新潮流

测试人

软件测试 自动化测试 测试开发

关于应用架构约束治理的探讨

疯狂架构

架构演进 架构治理 Archunit 架构约束防腐

面试官:说说SpringAOP实现原理?

王磊

Java 面试

Databend 开源周报第 134 期

Databend

2024上海国际自动驾驶技术展览会

AIOTE智博会

自动驾驶展 智能驾驶展

模型驱动测试:引领软件质量的新潮流

霍格沃兹测试开发学社

转型敏捷中,有哪些无形的障碍?

敏捷开发

项目管理 Scrum 敏捷开发 敏捷转型

容器中的⼤模型(一)| 三行命令,大模型让Excel直接回答问题

智领云科技

容器 大模型

ConfigMap挂载与Subpath在Nginx容器中的应用

华为云开发者联盟

容器 开发 华为云 华为云开发者联盟

Oracle 推出 GraalVM Java JIT 编译器,但仅限于自己的 JDK_编程语言_InfoQ精选文章