在本文中,我们将研究 GraalVM 的演变和前景,以了解为什么您会从将该技术集成到生产中中受益。
GraalVM,顾名思义,通过提高 Java 应用程序的性能,同时使高效、无缝的多语言编程成为现实,代表了现代云原生开发的圣杯。但这些说法背后究竟隐藏着什么?在本文中,我们将研究该平台的演变和前景,以了解为什么您会从将该技术集成到生产中受益。我们还将总结 GraalVM 许可的关键方面,包括 Oracle 于 2023 年推出的新许可证。
GraalVM 对 Java 开发的好处
GraalVM 是一个基于 Java HotSpot VM 的平台,用 Java 实现。它包括 Java 开发工具包 (JDK)、高级即时编译器、提前编译器以及用于向项目添加编程语言的工具。其目标是加速基于 JVM 的应用程序并为多语言编程提供基础。该技术为 Java 开发人员带来的好处可概括如下:
与传统的 HotSpot C1/C2 编译器相比,纯粹用 Java 编写的增强型 JIT 编译器提高了应用程序的性能。
AOT 编译(本机映像)允许将基于 JVM 的应用程序转换为几乎即时启动的本机映像,从而消除了 Java 程序臭名昭著的预热。
Truffle 框架和 Sulong(LLVM 解释器)可以将 JavaScript、Python 和 C/C++ 等非 JVM 语言无缝集成到应用程序中。
Native Image 有助于优化内存占用并提供即时启动,这对于某些用例(例如Lambda 函数)至关重要。但即使应用程序很难迁移到 Native Image,程序员仍然可以使用 GraalVM 来提高吞吐量并将其微服务提升到一个新的水平,其中每个服务都使用各种编程语言的功能来执行特定任务。
最新版本中 GraalVM 的显着改进
GraalVM 是一项快速发展的技术。自 2019 年首次发布以来,GraalVM CE 引入了数十项功能和数百项增强功能。这些变化涉及 Native Image 技术和语言框架。在一篇文章中不可能列出所有这些内容,因此下面只是对 Native Image 和 Java 所做的一些改进,展示了最新版本中的项目进展:
Native Image 现在作为 GraalVM(适用于 JDK 20)的一部分提供,因此无需使用 gu install native-image 命令安装它。
支持的平台和系统配置的扩展:该技术适用于 Linux 和 macOS 的 x64 和 AArch64 以及 Windows 的 x64。Docker 容器镜像也可在 GitHub 上获取,以支持基于容器的开发。
Java 开发人员现在可以使用 GraalVM Reachability Metadata Repository,其中包含默认情况下尚不支持 GraalVM Native Image 的最流行 Java 库和框架的元数据。该存储库使用户能够最大限度地减少运行时的错误。
内存消耗正在不断改进。例如,基本 GraalVM 二进制文件的大小在版本 22.2.0 中减少了 42%。2023 年 6 月版本拥有更好的本机映像构建过程的内存占用,降低了内存不足错误的风险并更有效地使用可用资源。
添加了对 AWT 和 Swing 工具包的支持,用于开发 GUI 应用程序。
此外,GraalVM 始终基于最新的 OpenJDK 版本,并包含错误修复和安全补丁,因此建议关注季度 CPU 版本,以确保开发环境安全。
并行GC集成
GraalVM 目前在社区版中使用 SerialGC 和 EpsilonGC。Oracle GraalVM 还附带 G1GC(以下部分提供了有关这些版本的更多信息)。SerialGC 在一个线程中工作,并冻结所有应用程序线程,直到完成收集,从而增加延迟。为了减少暂停时间,决定将ParallelGC 实现为 GraalVM CE(https://github.com/oracle/graal/pull/6349)。新的收集器基于 SerialGC 代码,但利用多个线程来并行化其工作。
新的 ParallelGC 默认情况下每个 CPU 核心使用一个线程(每个核心最多 8 个线程)来执行垃圾收集。线程的数量可以通过-XX:ParallelGCThreads选项来调节。由于垃圾收集是分几个阶段完成的,因此阶段计算传递闭包首先被并行化,但计划包括更多GC阶段的并行化。
BellSoft 工程师积极参与新收集器的开发和集成(https://github.com/orgs/oracle/projects/6/views/1),并使用 HyperAlloc 基准测试来测量其性能,旨在模拟影响 GC 延迟的应用程序特征。结果表明 GC 暂停时间减少了 10-40%。
目前,ParallelGC 作为实验性功能在 Liberica Native Image Kit 中实现。在收到社区的反馈并验证其性能后,工程师将其集成到主要的 GraalVM CE 分支中。(https://github.com/bell-sw/Liberica/issues)
GraalVM CE 与 Oracle GraalVM 和新的 Oracle 许可证
截至 2023 年 6 月,有两个 GraalVM 发行版可用:基于 OpenJDK 的 GraalVM 社区版 (CE) 和基于 Oracle JDK 的 GraalVM 企业版 (EE)。但今年,Oracle 更改了 GraalVM 的许可条款。从 2023 年 6 月版本开始,新的 GraalVM 发行版可用于 JDK 17 和 JDK 20,而不是 EE,即 Oracle GraalVM。
GraalVM EE 仍可用于 19 至 22 个 GraalVM 版本,在针对商业客户的 My Oracle Support 和针对 GraalVM EE 的 OTN下分发(https://www.oracle.com/downloads/licenses/graalvm-otn-license.html),包括针对个人、开发和其他用户的早期采用者版本的许可证。
Oracle GraalVM 根据新的GraalVM 免费条款和条件 (GFTC)(https://www.oracle.com/downloads/licenses/graal-free-license.html) 进行分发,包括允许免费个人和商业使用的早期采用者版本许可证。该许可证允许开发人员将该程序用于内部业务运营,并重新分发未经修改的程序,而无需为此分发收取任何费用,包括包含该程序副本或与该程序副本捆绑在一起的产品的费用。什么是早期采用者版本?这些产品版本会不断开发和修改,因此未来版本可能包含与以前版本不兼容的功能和更改。
另一方面,GraalVM CE(或 GraalVM 开源)是从 GitHub 源构建的开源软件,并根据 GPLv2 + Classpath Exception 获得许可。GPLv2 + CPE 是一种自由软件许可证,使开发人员能够修改和自由分发产品的源代码。与此同时,它还赋予他们将模块或库添加到类路径中的权利,您可以在其他许可条件下分发这些模块或库。
GraalVM CE 版本可在GitHub上获取,而 Oracle GraalVM 可以从网站下载。(https://github.com/graalvm/graalvm-ce-builds/releases)(https://www.graalvm.org/downloads/)
下表总结了 GraalVM 版本和许可证:
GRAALVM版本 | 发布 | LICENSE |
---|---|---|
适用于 Java 20 的 GraalVM | Oracle GraalVM | GraalVM 免费条款和条件 (GFTC),包括早期采用者版本的许可 |
GraalVM 社区版 | GPLv2+CPE | |
适用于 Java 17 的 GraalVM | Oracle GraalVM | GFTC 包括早期采用者版本的许可证 |
GraalVM 社区版 | GPLv2+CPE | |
适用于 Java 11、17 的 GraalVM 22 | GraalVM 企业版 | 面向 Oracle 客户的 My Oracle Support 包括针对个人、开发和其他用户的早期采用者版本的许可 |
GraalVM 社区版 | GPLv2+CPE | |
适用于 Java 11、17 的 GraalVM 21 | GraalVM 企业版 | 面向 Oracle 客户的 My Oracle Support 包括针对个人、开发和其他用户的早期采用者版本的许可 |
GraalVM 社区版 | GPLv2+CPE |
就支持而言,GraalVM 是一个社区驱动的项目,有多种渠道可以获得帮助:
文档
GitHub 存储库(开发人员可以在其中报告错误)
GraalVM 工程师的 Slack 频道
邮件列表
拥有 Oracle Java SE 订阅的公司可以在其订阅范围内获得 GraalVM 的企业支持。还可以获得 GraalVM 发行版的其他供应商的支持。例如,BellSoft 为 Native Image 技术提供企业支持,作为 Liberica Native Image Kit(基于 GraalVM CE 的本机映像编译器)的一部分。
特点又如何呢?GraalVM 社区在GraalVM 项目顾问委员会的支持下致力于开发 GraalVM CE ,该委员会包括主要组织的代表:Oracle、VMWare、BellSoft、Red Hat 等。同时,Oracle单独在Oracle GraalVM上工作。
在大多数情况下,Oracle GraalVM 和 GraalVM CE 提供类似的功能,但有一些变化尚未移植到社区版。例如,Oracle GraalVM Native Image 包括 G1 GC、基于机器学习 (ML) 的配置文件推理和配置文件引导优化,而 GraalVM CE 中不具备这些功能。
结论和未来计划
该项目的主要发展趋势涉及 Native Image 的进一步增强以及与 JDK 的显着融合,即代码库、功能、API 和增长策略的一致性。实现这一一致性的步骤之一是在 2022 年引入Galahad 项目,旨在为 OpenJDK 贡献与 Java 相关的 GraalVM 技术。
GraalVM 已被 Twitter、Facebook、阿里巴巴等许多知名公司用于生产环境。此外,主要 Java 框架也原生支持它:Spring Boot、Quarkus、Micronaut 和 Helidon。行业领导者对 GraalVM 的兴趣使我们有理由期待该技术在不久的将来得到更广泛的采用。文章来源:https://www.toymoban.com/diary/java/461.html
文章来源地址https://www.toymoban.com/diary/java/461.html
到此这篇关于GraalVM 的特性和未来发现前景的文章就介绍到这了,更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!