GraalVM 社区版 22.2 发布:优化内存使用、减少 JDK 体积


GraalVM 社区版 22.2 已发布。

GraalVM 是一个高性能的 JDK 发行版。它旨在加速用 Java 和其他 JVM 语言编写的应用程序的执行,同时还为 JavaScript、Python、基于 LLVM 的语言(如 C 和 C++)以及许多其他流行编程语言提供运行时。此外,GraalVM 为编程语言之间提供了高效互操作性,并将 Java 应用程序提前编译为本机可执行文件,从而加快启动时间并降低内存开销。

主要变化

减少 JDK 发行版体积

从 22.2 开始,GraalVM JDK 更加模块化,并且不再包含 JavaScript runtime、LLVM runtime 和 VisualVM。开发者如需安装这些组件,请使用gu install jsgu install llvmgu install visualvm命令进行安装。此举显著减少了 JDK 发行版体积。如果你使用 GraalVM 在 JVM 上运行 Java 应用程序或使用 Native Image,则设置 GraalVM 和运行应用程序的方式没有变化,除了 JDK 的下载体积显着减少。

下面是 JDK 17 在 22.1 与 22.2 的对比:

优化构建 Native Image 的内存占用率

由于内部数据结构的改进,目前 Native Image 在构建本地可执行文件时需要的内存明显减少。内存占用率降低在内存受限的环境中特别有利,比如云服务和 GitHub Action。从 22.2 开始,Native Image 工具支持成功构建许多较大的原生可执行文件,只需使用 2GB 的 Java heap 内存。

例如,Spring PetClinic 应用程序现在只需使用 2GB 的内存即可构建。

========================================================================================================================
GraalVM Native Image: Generating 'petclinic-jpa' (executable)...
========================================================================================================================
[1/7] Initializing... (12.2s @ 0.47GB)
 Version info: 'GraalVM 22.2.0 Java 17 EE'
 Java version info: '17.0.4+11-LTS-jvmci-22.2-b05'
 C compiler: gcc (linux, x86_64, 9.4.0)
 Garbage collector: Serial GC
[2/7] Performing analysis...[*********] (67.5s @ 1.92GB)
26,184 (94.56%) of 27,689 classes reachable
42,026 (68.44%) of 61,409 fields reachable
 140,935 (67.78%) of 207,928 methods reachable
 1,397 classes, 415 fields, and 7,894 methods registered for reflection
65 classes,74 fields, and55 methods registered for JNI access
 4 native libraries: dl, pthread, rt, z
[3/7] Building universe...(56.5s @ 1.95GB)
[4/7] Parsing methods...[***](5.9s @ 1.48GB)
[5/7] Inlining methods... [****] (2.4s @ 1.55GB)
[6/7] Compiling methods...[****](19.4s @ 1.74GB)
[7/7] Creating image...(8.4s @ 1.68GB)
43.28MB (45.39%) for code area:97,635 compilation units
47.41MB (49.73%) for image heap:579,002 objects and 835 resources
 4.65MB ( 4.87%) for other data
95.34MB in total
------------------------------------------------------------------------------------------------------------------------
Top 10 packages in code area: Top 10 object types in image heap:
 3.21MB com.oracle.svm.core.code 9.99MB byte[] for code metadata
 1.20MB jdk.proxy4 9.00MB byte[] for embedded resources
 1.06MB sun.security.ssl 5.83MB byte[] for java.lang.String
 878.77KB java.util4.73MB java.lang.Class
 814.08KB com.mysql.cj.jdbc4.22MB java.lang.String
 555.53KB org.hibernate.hql.internal.antlr 3.53MB byte[] for general heap data
 488.76KB org.apache.coyote.http21.65MB byte[] for reflection metadata
 476.47KB org.apache.catalina.core 1.20MB com.oracle.svm.core.hub.DynamicHubCompanion
 465.88KB java.lang.invoke 725.72KB c.o.svm.core.hub.DynamicHub$ReflectionMetadata
 460.78KB com.sun.crypto.provider599.67KB java.lang.String[]
33.08MB for 1101 more packages 5.06MB for 4765 more object types
------------------------------------------------------------------------------------------------------------------------
 77.2s (42.7% of total time) in 306 GCs | Peak RSS: 3.42GB | CPU load: 9.52
------------------------------------------------------------------------------------------------------------------------
Produced artifacts:
 /home/janedoe/demos/spring-native/samples/petclinic-jpa/target/petclinic-jpa (executable)
 /home/janedoe/demos/spring-native/samples/petclinic-jpa/target/petclinic-jpa.build_artifacts.txt (txt)
========================================================================================================================
Finished generating 'petclinic-jpa' in 3m 0s.

改进 GraalJS 中的互操作性

从 22.2 开始,默认情况下为其他语言的对象分配适当的 JavaScript 原型。该功能处于实验性阶段,通过让外部对象作为 JavaScript 中的数组、函数和其他类型出现,增加了代码的可移植性。

下载地址 | 发布公告


相關推薦

2022-10-27

GraalVM 22.3 社区版已发布。作为 2022 年的最后一个功能版本,GraalVM 22.3 社区版在接下来的 12 个月都会获得更新。因此,如果你正在考虑升级 GraalVM,现在是一个很好的时机。 GraalVM 是一个高性能的 JDK 发行版。它旨在加速用 Jav

2023-06-17

GraalVM是一个基于OpenJDK的高性能多语言虚拟机,它可以将Java应用编译成本地可执行文件,从而提高启动速度,降低内存占用,减少云资源消耗。GraalVM还支持JavaScript,Python,Ruby,LLVM和WebAssembly等多种语言,并提供了丰富的跨语言

2023-11-03

23Mb。 (更小) 同时支持 jdk8, jdk11, jdk17, jdk21, graalvm native image 入门探索视频(用户录制): 最近更新了什么? 调整 solon.view 插件,默认添加请求上下文 context 对象(感谢用户建议) 调整 SnackActionExecutor 默认

2023-09-01

23Mb。 (更小) 同时支持 jdk8, jdk11, jdk17, jdk20, graalvm native image 入门探索视频(用户录制): 最近更新了什么? 增加 http range 分片输出支持 增加 IoUtil 工具类,替代旧的 Utils IO功能(旧的标为弃用) 增加 

2023-10-10

23Mb。 (更小) 同时支持 jdk8, jdk11, jdk17, jdk21, graalvm native image 入门探索视频(用户录制): 最近更新了什么? 增加 Context::headerOfResponse 接口 增加 http server gzip 整体配置支持(详见官网的《应用常用配置说明

2023-09-05

23Mb。 (更小) 同时支持 jdk8, jdk11, jdk17, jdk20, graalvm native image 入门探索视频(用户录制): 最近更新了什么? 增加 AppContext 类 增加 @Component 自动代理特性,即自动识别AOP需求并按需启用动态

2023-07-22

23Mb。 (更小) 同时支持 jdk8, jdk11, jdk17, jdk20, graalvm native image 入门探索视频(用户录制): 本次更新了什么? 新增 solon-openapi2-knife4j 插件,替代 solon-swagger2-knife4j 增加 server.socket.ssl.* 配置 增加 server.websocket

2023-08-24

23Mb。 (更小) 同时支持 jdk8, jdk11, jdk17, jdk20, graalvm native image 入门探索视频(用户录制): 更新了什么? 新增 mqtt5-solon-cloud-plugin 插件(用于支持 v5 版本) 增加 mqtt-solon-cloud-plugin 支持 publishTimeout 配置(默

2023-10-26

23Mb。 (更小) 同时支持 jdk8, jdk11, jdk17, jdk21, graalvm native image 入门探索视频(用户录制): 最近更新了什么? 新增 nami.coder.fury 插件 新增 solon.serialization.fury 插件 新增 hibernate-solon-plugin 插件(提供标准 jpa

2024-08-20

月 18 日,MoonBit 首次在海外发布后,迅速引起了国际技术社区的广泛关注,并登上了 HackerNews 的头条。HackerNews 作为硅谷最具影响力的科技社区之一,对 MoonBit 的每一次重大特性更新都给予了高度关注。 此外,MoonBit 还在全球 De

2023-09-22

23Mb。 (更小) 同时支持 jdk8, jdk11, jdk17, jdk21, graalvm native image 入门探索视频(用户录制): 最近更新了什么? 完成 JDK21 编译测试,功能单元测试(for JDK21) 添加 HttpServerConfigure::setExecutor 接口,用于支持虚

2023-08-17

23Mb。 (更小) 同时支持 jdk8, jdk11, jdk17, jdk20, graalvm native image 入门探索视频(用户录制): 更新了什么? 增加 solon.cloud.metrics 对 MeterBinder 的自动装配处理 增加 HandlerLoaderFactory,以实现所有 @Mapping 注

2024-07-17

法执行升级操作。需要注意的是,在JumpServer v4.0版本中,社区版可管理的资产数量将被限制在5000台以下。 1. 全新的界面体验 在JumpServer v4.0版本中,JumpServer开源项目组精心调整了操作界面的字体样式,为用户打造统一且舒适的

2023-06-16

[不兼容升级] java 版本从 jdk 8 升级到 jdk 17 且需要使用 graalvm 运行(暂时未解决原生jdk存在的问题) [不兼容升级] springboot 升级 3.0 版本 [不兼容升级] springcloud 升级 2022 版本 [不兼容升级] springcloud-alibaba 升级 2022 版本