Oracle GraalVM 是一个使用即时 (JIT) 编译器加速 Java 和 JVM 应用性能的高性能 JDK。它由 Oracle 提供 24/7 支持,能够降低应用延迟,通过缩短垃圾回收时间提高峰值吞吐量。
此外,GraalVM 本地镜像实用程序可提前 (AOT) 编译 Java 字节码,生成可近乎瞬时启动且仅占用极少内存资源的本机可执行文件。
GraalVM 起始于 2011 年 Oracle 实验室的一个研究项目。该项目旨在创建一个可以高性能运行多种编程语言的运行时平台,其核心是高级优化 GraalVM 编译器。GraalVM 编译器可用作 Java 虚拟机的即时 (JIT) 编译器,或帮助 GraalVM 本地镜像提前将 Java 字节码编译为本机机器码。同时,GraalVM 的 Truffle 语言实施框架可与 GraalVM 编译器协作,以超强性能运行 JavaScript、Python、Ruby 以及 JVM 支持的其他语言。
在 JIT 模式下,JVM 可使用 GraalVM JIT 编译器,在应用运行时基于 Java 字节码创建特定于平台的机器码。编译器将在程序执行时执行增量编译,并对频繁执行的代码进行额外优化。得益于聚合内联、部分逃逸分析以及其他高级优化技术,这可以确保热点代码超快速运行。其中,一些优化技术可以降低对象分配需求,降低垃圾回收器负载,优化长时间运行应用的性能。
GraalVM 本地镜像实用程序也可以编译 Java 字节码,提前(即在构建时)生成本机机器可执行文件。这些可执行文件能够近乎瞬时启动,仅占用极小内存 — 基于 JVM 运行的 Java 应用也将占用内存;只包含应用的类、方法和依赖库,非常简洁。
得益于 Truffle 语言实施框架,GraalVM 还支持多语言互操作。利用 Truffle,由受支持语言编写的应用程序可使用多语言库。例如,JavaScript 程序可以运行 Ruby 方法,无需制作副本就能共享数值。基于 JVM 运行时,Truffle 能够与 GraalVM 编译器协作,将受支持语言编译为本机机器码,从而优化性能,就像 Java 一样。
阅读 GraalVM 傻瓜宝典电子书,详细了解 GraalVM 编译器。
GraalVM 的编译器包含众多附加优化算法,可极大增强性能,降低资源消耗。GraalVM 的本地镜像特性支持一系列高级特性,包括 G1 垃圾回收器、压缩指针,以及可帮助编译器生成更高效代码的配置文件引导优化。
GraalVM 包含在 Java SE 产品中,无需额外付费。它由 Oracle 提供 24/7 支持,支持您访问安全补丁和关键路径更新,可提供具有更高可预测性的性能和可靠性。如需将 Java 迁移到云中,用户可在 Oracle Cloud Infrastructure (OCI) 中免费使用 GraalVM。
GraalVM 支持开发人员以更出色的隔离特性和更高的敏捷性,为云环境或混合环境构建更高效的代码。如今,越来越多的企业开始使用 GraalVM,原因如下:
GraalVM 创新功能可帮助 Java 代码满足当今的计算需求,以超快速性能快速响应客户需求。它可以使用高级优化器提升峰值吞吐量,还可以尽可能减少对象分配,缩短垃圾回收时间,优化内存。在 JIT 模式下,GraalVM 可提升性能高达 50%。而得益于更早释放内存,您可以在同一基础设施上运行其他工作负载,降低 IT 成本。
构建云原生应用Oracle GraalVM 的本地镜像实用程序可提前将字节码 Java 应用编译为二进制机器码。本机可执行文件的启动速度可提升近 100 倍,内存占用可降低 5 倍。
随着企业将工作负载迁移到云中,按小时为系统资源付费,GraalVM 可有效节约运营成本。这使 GraalVM 生成的本机可执行文件成为了微服务(由微服务框架提供支持,例如 Helidon、Micronaut、Quarkus 和 Spring Boot 等等)部署的理想选择。
开发多语言程序,提高效率您可以基于 JVM,以超强性能运行 Java 以及 JavaScript 等其他语言。Oracle NetSuite SuiteScript 是一种扩展语言,支持用户对基于 NetSuite 运行的应用进行定制。Oracle GraalVM 支持 NetSuite 嵌入基于 Truffle 的 JavaScript 运行时,从而将 JavaScript 编译为运行速度比基于 JVM 的 SuiteScript 快 4 倍的机器码。
GraalVM 包含一个可在应用运行时即时生成机器码,从而加速 Java 应用性能的高级优化编译器。同时,得益于提前编译,本地镜像可以快速启动,降低内存占用,因此成为了云原生部署的理想选择。GraalVM Enterprise 还支持多语言程序,允许开发人员使用最佳的库来解决问题(无论应用基于哪种语言编写),从而提升效率。
注:为免疑义,本网页所用以下术语专指以下含义: