GraalVM:高性能 JDK 的未来-Java专区论坛-技术-SpringForAll社区

GraalVM:高性能 JDK 的未来

本文将讨论 GraalVM 是什么、其架构以及它为何如今备受关注。

d2b5ca33bd20250120204434

什么是 GraalVM?

  • • GraalVM 是一个高性能的 JDK,支持 AOT(提前编译)编译,可以通过替代的 JIT(即时编译)编译器显著提升 Java 应用程序的性能。
  • • 它通过减少垃圾回收时间,降低了应用程序的延迟并提高了峰值吞吐量。

原生 Java 代码执行

在深入探讨 GraalVM 如何改进并超越传统 JDK 之前,我们先来了解 JDK 是如何执行原生 Java 代码的。

众所周知,Java 遵循 WORA(一次编写,随处运行) 的编程原则,这意味着我们编写的代码可以在任何机器上运行,而无需针对机器类型进行任何修改。

  • • 在幕后,Java 会将代码编译并转换为一种称为字节码的中间形式,然后在机器上运行。

d2b5ca33bd20250120204510

  • • 生成的字节码是平台无关的,因此 Java 被称为“一次编写,随处运行”的编程语言。
  • • 接下来,JVM 会获取这些字节码并将其转换为机器码。
  • • 这个过程涉及多个步骤,包括类加载、字节码验证和即时编译。

类加载 — 这是将类的字节码加载到内存中以转换为机器码的过程。

字节码验证 — 这是在将字节码转换为机器码之前对其进行验证的过程,以确保安全性。

即时编译(JIT) — 这是一种通过运行时将字节码编译为本地机器码来提高 Java 应用程序性能的过程。

d2b5ca33bd20250120204527

 

_图片来源 _Heeah

总结一下,原生代码的执行流程如下:

源代码 -> JDK -> 字节码 -> JVM

GraalVM 架构

d2b5ca33bd20250120204535

 

Java HotSpot VM

  • • Java HotSpot VM 是 GraalVM 的基础层。
  • • 它作为运行 Java 字节码的基础,并提供标准功能,如即时编译(JIT)、垃圾回收和线程管理。在 GraalVM 中,HotSpot VM 将 Graal 编译器集成为其 JIT 编译器。
  • • 它的作用类似于传统的 JVM。

GraalVM 编译器层

  • • GraalVM 编译器 是一个高性能、多语言的 JIT 编译器,与 HotSpot VM 集成。
  • • 它取代了 HotSpot VM 中传统的 C2 编译器,为 Java 和其他语言提供更好的优化。
  • • GraalVM 编译器还支持提前编译(AOT),用于生成原生镜像。

语言实现框架层

  • • 这一层使 GraalVM 能够支持多种编程语言。它提供了在 GraalVM 基础设施上构建语言运行时的工具和 API。
  • • 这一层是使用 Truffle 框架 和 LLVM 运行时_ 构建的。

GraalVM 的特性

  • • 低资源使用:GraalVM 的原生镜像在运行时不需要传统的 JVM,因此消耗的内存和 CPU 更少。
  • • 更高的安全性:在提前编译(AOT)期间进行的静态分析减少了运行时类加载和反射等攻击面。
  • • 快速启动:原生二进制文件几乎可以立即启动,因为它们不需要字节码解释或 JIT 编译。
  • • 紧凑的打包:原生镜像仅捆绑必要的应用程序代码和依赖项,从而生成更小的可执行文件。
  • • 框架支持:Quarkus、Micronaut 和 Spring Boot 等框架与 GraalVM 无缝集成,支持优化应用程序。
  • • 主流云平台支持:AWS Lambda、Google Cloud 和 Azure 等主要平台都支持 GraalVM,以实现高效的部署。

GraalVM 是实现更快启动时间、更低内存使用、原生镜像生成和无缝多语言支持的绝佳选择。

GraalVM 与 JVM 的对比

d2b5ca33bd20250120204543

总结

GraalVM 通过其高性能的 JIT 编译器、AOT 编译支持以及多语言能力,为现代应用程序提供了显著的性能提升和更低的资源消耗。它不仅是 Java 开发者的强大工具,还为其他编程语言提供了无缝的集成支持。随着云原生应用的普及,GraalVM 的未来前景广阔。

 

请登录后发表评论

    没有回复内容