11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

GraalVM 22.2 添加库配置仓库功能

作者:Karsten Silz

  • 2022-08-27
    北京
  • 本文字数:1573 字

    阅读完需:约 5 分钟

GraalVM 22.2添加库配置仓库功能

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 语言,还能编译JavaScriptPython、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”。


原文链接:

GraalVM 22.2 Adds Library Configuration Repository

2022-08-27 08:004348

评论

发布
暂无评论
发现更多内容

随着并发的增加,响应时间和吞吐的变化

朱月俊

架构师训练营 - 第七周 - 学习总结

stardust20

性能优化作业

qihuajun

关注系统压力测试

麻辣

优秀的求职者,是如何巧妙应对面试提问呢?

xcbeyond

面试 加班 职业规划 薪资 自我介绍

第七周总结

天之彼方

第 7 周 - 作业 2

seng man

重置 Grafana admin 密码

耳东@Erdong

Grafana Grafana password

K8S 中的 Grafana 数据持久化

耳东@Erdong

Kubernetes k8s Grafana 配置文件持久化

过早三件套之面窝

zhoo299

美食

架构师训练营Week7学习总结

Frank Zeng

LeetCode题解:283. 移动零,JavaScript,一次遍历,详细注释

Lee Chen

大前端 LeetCode

antd vue upload组件使用customRequest上传文件显示文件上传进度

Seven_xw1213

大前端 antd vue upload customRequest 进度条

解决 EXT4 使用无法挂载

耳东@Erdong

ext4 journal

性能优化(一)

olderwei

Github 创建发行版本

耳东@Erdong

GitHub github release

简约而不简单的分布式通信基石

架构师修行之路

分布式 socket udp TCP/IP 通信协议

性能测试与优化学习总结

qihuajun

架构师0期07周作业

我在终点等你

架构师训练营第7周

大丁💸💵💴💶🚀🐟

架构师训练营Week7作业

Frank Zeng

如何找一碗正宗的热干面

zhoo299

美食

性能压测的时候,随着并发压力的增加,系统响应时间和吞吐量如何变化,为什么?

一叶知秋

米酒米酒黼子酒

zhoo299

美食

Docker基础修炼6--网络初探及单机容器间通信

黑马腾云

Docker Linux 容器 运维 虚拟化

第七周命题作业

天之彼方

八个排序的原理、Java 实现以及算法分析

多选参数

数据结构 算法 排序 排序算法 数据结构与算法

Scrapy爬虫入门

烫烫烫个喵啊

python 爬虫

架构师训练营第7周

大丁💸💵💴💶🚀🐟

总结

chenzt

antd vue 使用upload组件action上传文件

Seven_xw1213

大前端 antd vue upload

GraalVM 22.2添加库配置仓库功能_编程语言_InfoQ精选文章