GraalVM 以将Java编译成较小的原生可执行文件而闻名,这些原生可执行文件的启动速度要比传统 Java 程序快得多。Oracle Labs 发布的22.2版本通过引入针对 Java 库的配置仓库解决了一个长期存在的痛点问题。原生 Java 编译会使用更少的内存,GraalVM 分发版在 Apple Silicon 运行得更好,并且文件体积更小。
原生编译使 Java 在云中更具竞争力。如今,Quarkus、Micronaut 和 Helidon 都支持在生产环境中使用 GraalVM。Spring 6 和 Spring Boot 3 计划在今年年底实现这一目标。InfoQ 针对这个话题,曾经发布过一个系列文章。
GraalVM 为什么需要配置仓库呢?与常规的 Java 不同,原生 Java 的可执行文件在运行时无法动态加载新的代码。这就是为什么 GraalVM 的原生编译器 Native Image 需要知道运行时用到的所有类、方法和字段的原因(“封闭性假设”)。Native Image 通过可达性分析能够自动进行探测。但是,鉴于 Java 的动态特性,比如反射和代理,会隐藏一些代码,从而导致其无法被分析到。使用这些动态特性的应用和库必须向 Native Image 提供配置线索(hint),否则它们根本无法在原生 Java 中运行。
到现在为止,Java 开发人员必须为那些还没有提供 GraalVM 支持的 Java 框架提供这些线索信息。GraalVM 可达性元数据仓库(GraalVM Reachability Metadata Repository)有望消除这一负担:GraalVM 22.2 会从这个新的中央仓库中读取线索信息(已经被重命名为“可达性元数据”)。它来源于 GraalVM、Micronaut、Spring Boot 和 Quarkus 的协作,并且欢迎大家为其提供贡献。
现在,原生镜像在编译过程中使用的 RAM 会更少。例如,构建 Spring PetClinic应用仅需要使用 2GB。内存受限的 CI 环境或云服务,如 GitHub Actions,将会在这种资源节省中收益。
Native Image 不仅可以编译像 Java、Scala 和Kotlin这样的 JVM 语言,还能编译JavaScript、Python、Ruby、R 和 WebAssembly。在这个版本中,Python 有了一个实验性的字节码解释器,启动速度更快,性能也更好。JavaScript 与其他语言的对象之间的互操作性也得到了改善。
GraalVM 发行版的文件更小了,因为它更加模块化,不再包含 JavaScript 和 LLVM 的运行时以及 VisualVM。在 Linux 上,这使得 Java 17 GraalVM 发行版的大小减少了 42%,从 431 MB 减少到了 251 MB。
随着 22.2 版本的发布,原生的 Java 可执行文件可以将内存堆转储到文件中,就像传统的 Java 应用那样。这可以通过三种方式实现:调用运行时 API、向应用发送 OS 信号或者在启动后立即进行(这种方式同时会退出应用)。该版本还包含编译过程中更快的逃逸分析、在 Linux 上改善了调试功能并且为长时间的循环提供了实验性的 strip 挖掘优化(strip 挖掘会将一个长时间运行的循环转换为一个嵌套的循环,其中内部主体运行的时间是有限的。这样就可以把安全点放在外循环中,减少安全点轮询的开销。——译者注)。
现在,商业的 GraalVM 企业版提供了对 Apple Silicon 的实验性支持,在今年 4 月发布的 GraalVM 22.1 中,社区版就包含了这种支持。其他 GralVM 组件现在也能在这两个版本中支持 Apple Silicon,如 JavaScript、LLVM、Ruby、Java on Truffle VM 和 WebAssembly。企业版还可以在原生可执行文件中包含 CycloneDX 格式的软件物料清单(Software Bill of Materials,SBOM)。
OpenJDK 管理着 Java 语言的演进。但 GraalVM 不是 OpenJDK 的一部分,因为它属于 Oracle Labs。不过,由于 OpenJDK 在 Leyden 项目中推迟了其原生Java计划,GraalVM 仍将是未来几年内原生 Java 的唯一可选方案。
作者简介:
作为一名全栈 Java 开发人员,Karsten Silz 在欧洲和美国工作了 23 年。2004 年,他在美国合伙创立了一家提供软件产品的初创公司。Karsten 领导了 13 年的产品开发,并在公司成功出售后离开。自 2017 年以来,他一直在德国和英国做承包商(Spring Boot、Angular、Flutter)。2020 年,他作为 CTO 共同创立了 SaaS 初创公司“Your Home in Good Hands”。
原文链接:
评论