GraalVM 获得显著的性能提升、新的发布节奏和新的许可证

GraalVM Native Image AOT 编译器的优势

GraalVM Native Image Ahead-of-Time (AOT) 编译器为 Java 生成原生可执行文件,相比传统的 Just-in-Time (JIT) 编译器,具有更快的启动速度、更低的 CPU 和内存占用、更高的安全性以及更小的磁盘占用。Oracle 在 GraalVM for Java 17 和 20 中取消了“企业版”品牌,并在新的许可下免费提供其性能提升功能,使原生 Java 可执行文件的性能更接近 JIT 编译器的 Java 应用。

性能提升功能

GraalVM Native Image 通过以下三个功能提升性能:

  1. G1 垃圾回收器:与 JIT 编译器相同的垃圾回收机制。
  2. 压缩对象头和指针:减少内存占用。
  3. Profile-Guided Optimizations (PGO):在运行时收集分析数据,并在构建时进行应用特定的优化,而不是在运行时。

许可变更

新的 GraalVM Free Terms and Conditions (GFTC) 许可使之前的企业版功能免费用于生产环境,但并非开源许可。GraalVM 社区版 (CE) 仍然在 GNU General Public License (GPL) 下提供,但缺少上述三个闭源性能提升功能。

性能对比

Oracle 在 Spring PetClinic 应用上对 Native Image 与 HotSpot C2 JIT 编译器进行了基准测试。Native Image 的启动时间为 0.22 秒,仅为 HotSpot 的 3%;内存占用为 694 MB,是 HotSpot 的 40%。在峰值吞吐量方面,Native Image 达到 10,249 请求/秒,是 HotSpot 的 80%。结合内存使用和请求/秒,Native Image 的效率是 HotSpot 的两倍。

项目 Leyden 与 CRaC

Java 语言架构师 Mark Reinhold 在 2020 年提出了项目 Leyden,旨在解决 Java 启动慢、达到峰值性能慢和占用大等问题。Native Image 解决了这些问题,但使用它可能带来一些限制和更复杂的故障排除过程。OpenJDK 的 CRaC 项目仅解决了启动时间和达到峰值性能慢的问题,但限制较少。

应用框架支持

GraalVM 团队建议使用支持 Native Image 的应用框架,如 Helidon、Micronaut、Quarkus 和 Spring Boot(自 2022 年 11 月的 3.0 版本起)。2022 年 GraalVM 社区调查显示,Spring Boot 是最受欢迎的框架,使用率为 49%。

GraalVM 项目进展

GraalVM 项目是 Oracle Labs 的一部分,除了 Native Image,还包括 Graal JIT 编译器和 Truffle 框架。Graal JIT 编译器现在包括 ZGC 垃圾回收器,Oracle 去年宣布这两个 Java 编译器将加入 OpenJDK。

Native Image 的改进

本次发布中,Native Image 进行了多项改进,包括机器学习用于更好的分支预测、减少构建过程的内存占用、自动构建环境设置、更友好的错误处理和报告、以及生成软件构建材料 (SBOM)。此外,Native Image 支持通过 JMX 进行远程管理,并添加了三个新的 JDK Flight Recorder (JFR) 事件。

GraalVM 的未来

GraalVM 团队将继续关注开发者反馈,优先解决影响大多数开发者的问题,并添加具有最大影响的新技术。GraalPy 是团队的重点之一,未来有望成为 Python 开发者进行数据科学工作的合理选择。Oracle Labs 将继续使用 GraalVM 作为研究项目的基础。

发布计划

GraalVM 将与 Java 21 同时发布,结束对 Java 20 的支持。GraalVM 的下一个非 LTS 版本 Java 22 计划于 2024 年 3 月 19 日发布。

阅读 47
0 条评论