本文将讨论 GraalVM 是什么、其架构以及它为何如今备受关注。
什么是 GraalVM?
- • GraalVM 是一个高性能的 JDK,支持 AOT(提前编译)编译,可以通过替代的 JIT(即时编译)编译器显著提升 Java 应用程序的性能。
- • 它通过减少垃圾回收时间,降低了应用程序的延迟并提高了峰值吞吐量。
原生 Java 代码执行
在深入探讨 GraalVM 如何改进并超越传统 JDK 之前,我们先来了解 JDK 是如何执行原生 Java 代码的。
众所周知,Java 遵循 WORA(一次编写,随处运行) 的编程原则,这意味着我们编写的代码可以在任何机器上运行,而无需针对机器类型进行任何修改。
- • 在幕后,Java 会将代码编译并转换为一种称为字节码的中间形式,然后在机器上运行。
- • 生成的字节码是平台无关的,因此 Java 被称为“一次编写,随处运行”的编程语言。
- • 接下来,JVM 会获取这些字节码并将其转换为机器码。
- • 这个过程涉及多个步骤,包括类加载、字节码验证和即时编译。
类加载 — 这是将类的字节码加载到内存中以转换为机器码的过程。
字节码验证 — 这是在将字节码转换为机器码之前对其进行验证的过程,以确保安全性。
即时编译(JIT) — 这是一种通过运行时将字节码编译为本地机器码来提高 Java 应用程序性能的过程。
_图片来源 _Heeah
总结一下,原生代码的执行流程如下:
源代码 -> JDK -> 字节码 -> JVM
GraalVM 架构
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 的对比
总结
GraalVM 通过其高性能的 JIT 编译器、AOT 编译支持以及多语言能力,为现代应用程序提供了显著的性能提升和更低的资源消耗。它不仅是 Java 开发者的强大工具,还为其他编程语言提供了无缝的集成支持。随着云原生应用的普及,GraalVM 的未来前景广阔。
没有回复内容