50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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

评论

发布
暂无评论

测试开发专题-开篇

禅道项目管理

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

基础设施设施即代码(IaC)平台 Pulumi | 混合云管理利器

郭旭东

基础设施即代码 IaC

520 表白,因一个分号被拒

悟空聊架构

520单身福利

Flume的负载均衡load balancer

大数据技术指南

flume 5月日更

Serverless:这真的是未来吗?(二)

Serverless Devs

Serverless 运维 云原生 后端 无服务器

520 单身福利|获奖名单公布~

InfoQ写作社区官方

520单身福利 热门活动

3、深潜KafkaProducer核心架构

杨四正

kafka 消息队列 kafka架构 kafka源码分析

GitHub标星235k!这份阿里P9纯手写的Java并发核心手册堪称无敌了

Java架构之路

Java 程序员 架构 面试 编程语言

致我的青春我的感情故事

Changing Lin

520单身福利

聊聊那些小而美的开源搜索引擎

代码先生

搜索引擎 elasticsearch meilisearch

采用DevOps的7个主要障碍,你一定不知道!

禅道项目管理

DevOps

官方出手,一针见血!Spring Boot官方手册来袭:从入门到实战

Java架构之路

Java 程序员 架构 面试 编程语言

HIVE跑个insert into select xxx 为什么CPU飙高

InfoQ_Springup

hadoop

高可用 Keycloak,K8s

Zhang

MySQL k8s keycloak

测试开发网络篇-网络协议简介

禅道项目管理

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

看完了京东年薪150万的大佬扔给我的“阿里内部Java 成长笔记”,差距不止一点点

Java 程序员 架构 面试 计算机

Why WebRTC|前世今生

声网

WebRTC RTC

UCloud一站式智能大数据平台USDP免费版正式发布!

UCloud技术

hadoop CDH

淘宝网能抗住“千亿级”并发量的奥秘是什么?

Java架构师迁哥

膜拜!Github访问量破百万,阿里内部首次公布的Java10W字面经有多强?

Java 程序员 架构 面试

分库分表 springboot+dubbo+mybatisPlus+shardingSphere

try catch

dubbo 分库分表 springboot ShardingSphere MyBatisPlus

SparkStreaming知识点总结

五分钟学大数据

大数据 5月日更

阿里分布式大神亲码“redis核心技术笔记”,没有废话,全是干货!

Java架构追梦

Java redis 阿里巴巴 架构 架构分布式

BitMap 转置算法:不一样的 Count 求解方式

GrowingIO技术专栏

BitMap

阿里内部百亿级高并发系统(全彩版小册开源):基础篇、数据库篇、缓存篇、消息队列篇、分布式服务篇、维护篇、实战篇;带你从基础到实战

Java 程序员 架构 高并发

iOS 面试策略之系统框架-并发编程

iOSer

ios 并发编程 系统框架

CompusBulider (模模搭)学习笔记7:3D场景中第一人称行走

ThingJS数字孪生引擎

3D可视化 数字孪生

普通代码块 静态代码块 构造代码块......傻傻分不清

麦洛

Java

基于 Qt Quick Plugin 快速构建桌面端跨平台组件

网易云信

音视频 qt

包容的回答者

王辉

个人成长 沟通 团队文化 批判性思维 正念

【干货分享】开放原子超级链动态内核XuperCore核心技术揭秘

百度开发者中心

区块链 超级链

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