返回

加速 Java 性能

GraalVM 的高性能 JIT 编译器生成优化的原生机器码,运行速度更快,产生的垃圾更少,并且由于一系列高级编译器优化以及积极且复杂的内联技术,CPU 使用率更低。最终结果是应用程序运行速度更快,消耗的资源更少,从而降低了云和基础设施成本。

Speedup vs JDK

图 1. 与 OpenJDK 11 相比的加速

加速的程度取决于工作负载的类型。在 Renaissance 基准测试套件上,“包含一系列现代工作负载,包括为 JVM 打造的各种流行系统、框架和应用程序”,Oracle GraalVM 实现了比 OpenJDK 8 高出 1.55 倍的几何平均加速,并且 OpenJDK 11 的结果类似。

Oracle 云基础设施

通过 在 Oracle GraalVM 上运行 Oracle 云基础设施 (OCI) 监控(遥测)服务,实现了 10% 的事务处理速率增长,以及垃圾收集时间减少 25%,GC 暂停时间减少 17% 和 CPU 利用率减少 5%。这些改进对于一项内存密集型服务来说意义重大,该服务通常会处理数千万个数据点,摄取数十亿个指标,并为不断增长的 OCI 服务产品组合提供数百万个请求。

OCI Monitoring Service Throughput

图 2. OCI 监控服务的吞吐量(每秒事务)

快速入门

降低基础设施成本

每个开发人员都追求更高的应用程序性能和更低的 CPU 和内存使用率。这些目标绝对值得称赞,并且借助 GraalVM 更容易实现,但这些改进的真正价值在于降低了在生产环境中运行应用程序的成本。更快的应用程序和更低的资源需求意味着提供特定服务的服务器数量更少,而更少的服务器意味着更低的每月云账单以及更低的本地部署的资本和运营成本。

计算很简单。即使资源需求没有减少,仅吞吐量提高约 11%,9 台服务器就能完成以前 10 台服务器的工作。这意味着少支付了一台云服务器的费用,或者少购买和维护一台数据中心服务器。

Oracle GraalVM 是我们 Dell EMC 服务器的性能之选。Java 工作负载分析和 SPECjbb®2015 基准测试使 max-jOPS 结果提高了近 8%。

— Kurtis Bowman,Dell EMC 服务器首席技术官办公室架构总监

值得发推的事情

Twitter 是世界上最受欢迎的社交媒体服务之一,它运行着一个每天被全球数百万用户使用的平台。为了降低成本和提高性能,Twitter 依赖 GraalVM 来运行核心服务,如 Tweet、Social 和 News。借助 GraalVM JIT 编译器的效率,Twitter 能够用更少的服务器满足其吞吐量目标,从而节省了大量成本。

能够在同一硬件上看到 8% 到 11% 的性能提升,而无需更改底层代码,这是一种千载难逢的机会,它可以为 Twitter 带来巨大的成本节约和未来灵活性。

— Chris Thalinger,Twitter 软件工程师

快速入门

无需更改代码即可获得更好的性能

虽然 OpenJDK 项目正在推进 6 个月发布周期,这提供了一个基于时间的发布模型,其中功能会在准备就绪时随时加入,但 Java 生态系统很大一部分仍在生产环境中使用 Java 8 和 Java 11。

GraalVM 致力于改进 Java 生态系统,并支持这些最流行的主要版本。GraalVM 包含一个兼容的 JDK,目前提供基于 Java 8 或 Java 11 的下载。要使用 GraalVM 加速 Java 应用程序,使用 Native Image 功能构建原生可执行文件,或合并来自其他语言的库,您无需进行复杂的迁移到最新的 OpenJDK 版本。迁移服务到 GraalVM 主要包括用基于 GraalVM 的下载或基本容器映像替换 JDK 下载或基本容器映像,而无需更改代码或需要利用新的语言功能!

快速入门

同样出色的开发人员生产力

GraalVM 最好的功能之一是它与 Java 生态系统中的所有工具兼容。GraalVM 可以运行 Java 应用程序,提供更好的性能,而无需更改代码或任何开发人员学习曲线。GraalVM 适应您的工作流程,作为一个兼容的 JDK,它不仅运行您正在使用的应用程序,还运行帮助您的 Java 工具!GraalVM 在您的调试器中工作,与您的构建工具一起工作,它在您最喜欢的 IDE 中工作,您可以将您的持续集成环境迁移到它,在它上运行您的问题跟踪器以及您正在使用的所有其他 Java 服务。

您甚至不需要是 Java 开发人员!如果您喜欢其他 JVM 语言,那就没问题。从 Kotlin 到 Clojure 到 Scala,GraalVM 都可以帮助您以出色的性能运行所有这些语言。

GraalVM 将 Java 生态系统和社区的力量与更强大的 JDK 发行版相结合,以实现所有世界的最佳。

快速入门

得到行业领先的 Java 应用程序框架的支持

GraalVM 受到行业领先的 Java 应用程序框架的支持,通常被认为是 Java 生态系统中最令人兴奋的创新。例如,使用 Native Image 技术 将应用程序编译成原生可执行文件的能力彻底改变了 Java 应用程序的云部署。对于微服务来说,这一点尤其重要,因为单个服务要么被整齐地打包在内存受限的环境中,要么迅速成为云成本的主要组成部分。幸运的是,借助 GraalVM,您无需用 Go 重新编写应用程序即可在云中取得成功。 大多数主要的 Java 应用程序和微服务框架都是在考虑 GraalVM Native Image 的情况下设计的,或者正在努力添加一流的支持。

Micronaut、Helidon、Quarkus 或 Spring Boot 用于微服务,PicoCLI 用于命令行应用程序——无论您面临什么任务,都有一种与 GraalVM Native Image 兼容的框架可以帮助您轻松完成任务。

快速入门

扩展 Java 生态系统

Java 虚拟机 (JVM) 使 Java 程序能够在从小型嵌入式设备到大型机的各种设备上运行。它是一个高性能运行时,抽象了底层硬件和操作系统平台的细节,以实现代码可移植性。但事实证明,JVM 实际上并不知道 Java 语言本身,因为它会执行编译为中间 Java 字节码格式的程序。这意味着任何可以编译为 Java 字节码的语言都可以在 JVM 上运行,例如 Scala、Kotlin 和 Clojure。但是,许多流行语言不会编译为 Java 字节码,因此无法利用 JVM 提供的优势以及即时编译带来的性能优势。

但是,得益于创新的 Truffle 语言实现框架,GraalVM 支持在 JVM 上执行许多流行的编程语言,包括 JavaScript/Node.js、Ruby、Python 和 R。它还支持编译为 LLVM 位代码或 WebAssembly (Wasm) 的 C、C++ 和其他语言。GraalVM 和 Truffle 不仅仅使非 Java 字节码程序能够在 JVM 上运行,Truffle 还使这些语言能够受益于 GraalVM 的高级优化编译器技术,从而运行得更快、更轻巧,就像在 GraalVM 上运行的 Java 应用程序一样。在所有情况下,GraalVM Truffle 语言的性能都与在 JVM 上运行时一样快,并且通常比在其原始运行时上运行时快很多倍。

TruffleRuby 在速度方面具有巨大潜力,因为它在 optcarrot 上的速度是 CRuby 的九倍。

— Carol Chen,Shopify 软件工程师

GraalVM Truffle Languages

图 4. GraalVM Truffle 语言

打破藩篱

除了 GraalVM 能够运行用多种语言编写的程序外,还可以运行使用多种语言的程序!GraalVM 支持的所有语言都可以使用数千个有用的 Node.js 包、Python 库和 Java 库。这使得像使用 Python 机器学习功能的 Java 微服务或使用 R 进行统计数据分析的 JavaScript 程序等用例成为可能。

GraalVM 的多语言支持 使具有不同语言和领域专业知识的开发人员能够协作。例如,荷兰国家警察使用 GraalVM 将 R 代码集成到用 Java 和 Scala 编写的 Spring Boot Web 服务中。这使他们的数据科学家能够用 R 编写代码来执行数据分析,而他们的 Java 和 Scala 开发人员则构建与 Apache Kafka 交互的服务。

在 Scala/JVM 项目中嵌入 R 代码是利用 R 中可用的强大数据处理包的绝佳方式……这意味着您(或您的数据科学家)可以使用专门的编辑器(例如 RStudio)来创建功能的 R 方面,同时可以使用您最喜欢的编辑器进行 JVM 方面(例如 IntelliJ)。

— Nathan Perdijk,Codestar Scala 开发人员

快速入门

联系我们