总结
Oracle 已从 Oracle JDK 中移除用于提升 Java 性能的 Graal JIT 编译器,并建议 GraalVM 用户迁移到 Oracle JDK 或 OpenJDK。随着这一变化,Azul Platform Prime 成为那些需要高性能 Java 平台的组织唯一的选择。
在本文中,您将了解:
- Oracle 已从 Oracle JDK 中移除 Graal JIT 编译器
- Oracle 鼓励 GraalVM 用户迁移到 Oracle JDK 或 OpenJDK
- 如果您的 Java 应用程序需要更好的性能,您需要一个高性能的 Java 平台
最近有人让我用不到一分钟的时间来概括 Java 性能的核心要素。显然,这是一个复杂而深入的主题,我们可以讨论几个小时甚至几天(我知道有类似的培训课程)。
不过,我的回答是,您需要了解三个基本概念:
- 延迟。由于 JVM 自动处理应用程序的内存管理,因此这会对应用程序响应请求的速度产生深远的影响。如果垃圾收集器 (GC) 在执行工作时暂停应用程序线程,则可能会导致响应延迟,甚至可能需要几分钟的时间。
- 吞吐量。应用程序每秒可以处理多少事务? 这在很大程度上取决于可用的硬件资源(核心、内存等)以及 JVM 通过即时 (JIT) 编译将字节码转换为本机指令的效率。
- 预热时间。一个更微妙但同样重要的性能因素是应用程序的预热时间。字节码实现了 Java 的“一次编写、随处运行”的承诺,但当 JVM 解释它们时,其运行速度比本机代码慢得多。这就是 JDK 1.2 中添加 JIT 的原因。然而,识别所有常用代码并对其进行编译需要时间。因此,预热时间就是应用程序达到最佳性能水平(也就是以每秒事务数衡量的吞吐量)所需的时间。
在过去的 30 年里,我们已经看到了大量的方法用来解决 Java 性能的这三个方面。只要看看 JVM 所包含的 GC 算法数量就知道了。即使在现在,我们仍然看到 OpenJDK 中的 Leyden 项目投入了大量努力,旨在解决预热时间的问题。
在核心 Java 平台之外也有一些项目正在开发提高性能的方法。其中最突出的是 GraalVM。
了解有关 Java 性能的更多信息
关于 GraalVM 我应该了解哪些信息?
不幸的是,GraalVM 已经成为一个含义过于宽泛的术语,涵盖了多个相互关联的项目。该项目最初是 Sun 实验室的一个研究项目,并在 Oracle 收购 Sun Microsystems 后继续进行。GraalVM 提供了一组旨在为多语言环境提供运行时的技术。以下是基本组成部分:
- Graal JIT 编译器。这是最初的 Graal 项目,很容易与 GraalVM 混淆。这是一个完全用 Java 编写的 JIT 编译器;其理念是使用 Java 可以使编译器更易于维护和改进。
- Truffle 语言解释框架。这提供了一种方法,可以将包括 Java 在内的多种编程语言转换为 Graal JIT 编译器可编译的形式。
- Substrate 虚拟机。这是一个可嵌入的 Java 子集虚拟机,经过优化可用于提前执行 Truffle 语言。
对于寻求更高性能 Java 运行时的用户而言,GraalVM 支持创建应用程序的 native-image 形式。参考我上面的定义,这仅为第三个方面提供了一个令人信服的解决方案:预热时间。通过直接编译为目标平台的本机指令并合并 Substrate JVM,消除了 JIT 编译,从一开始就实现了全速运行。
随着时间的推移,我们看到 GraalVM 团队和 Oracle Java 工程团队之间的协同效应日益增强。Oracle JDK 甚至包含 JDK 23 中的 Graal JIT 编译器。
GraalVM 是否仍然适用于 Java?
然而,Oracle 最近的公告显示,他们不再将此作为高性能 Java 解决方案的发展方向。从 JDK 25 开始,Graal JIT 编译器已从 Oracle JDK 中移除(它从未被贡献给 OpenJDK,因此其他发行版也未包含该编译器)。
更重要的是,Oracle 宣布“将 GraalVM 从 Java生态系统中分离出来。”博客文章中提供的详细信息进一步解释了这一点:
- GraalVM 团队正在转向专注于非 Java Graal 语言,包括 GraalPy 和 GraalJS。
- 适用于 JDK 24 的 GraalVM 是作为 Oracle Java SE 产品的一部分获得许可和支持的最终 GraalVM 版本。
- Oracle JDK 24 是包含实验性和可选 Graal JIT 的最终版本。
- GraalVM Early Adopter 技术(包括 Native Image)将停止向 Java SE 产品客户提供。
Oracle 的建议是,“建议对 Java 技术感兴趣的 GraalVM 用户迁移至 Oracle JDK 或 Oracle OpenJDK 版本。” 本质上,这意味着恢复使用 OpenJDK 构建版本。
现在如果想要提升 Java 性能,可以转向哪些方向?
如果您的 Java 应用程序需要更好的性能,包括更低的延迟、更高的吞吐量以及更短的预热时间,该怎么办?随着 Oracle 退出高性能 Java 平台领域,市场现在分为两个不同的阵营:标准 OpenJDK 发行版(Oracle Java SE、Amazon Corretto、Azul Platform Core)和高性能 Java 平台。

图 1:OpenJDK、GraalVM 和 Azul Platform Prime 之间的 Java 性能对比图。
对于上述矩阵请使用此图例:
黑色类型:黑色值表示发行版优于 OpenJDK 的程度。
例如,四分之一填充表示略优,而一半填充表示较优,
依此类推。
灰色类型:灰色数值表示该发行版在商业支持方面已进入生命周期终止 (EOL) 状态
幸运的是,Azul 提供了应对这一问题的解决方案,即我们的 Platform Prime 高性能 Java 平台 [图 1]。Platform Prime 使用 C4 垃圾收集器提供更低的延迟,并通过 Falcon JIT 编译器生成的更优化的代码提供更高的吞吐量。它还提供了一系列用于缩短预热时间的解决方案:ReadyNow 配置文件可告知 JVM 立即编译哪些内容,云原生编译器可将 JIT 卸载到集中式服务,甚至还有 CRaC 技术,可从预保存状态立即重启应用程序。
如果您正在为 Java 应用程序寻找高性能解决方案,为什么不尝试一下呢?当然,你应该做好功课。阅读我们全新的高性能 Java 平台对比指南,详细了解您的可选方案。