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

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 注

2023-06-16

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

2022-07-28

在运行时能够可靠编译的向量计算,在支持的 CPU 架构上优化向量指令,从而实现优于标量计算的性能。 Switch 模式匹配(第三预览版) 用 switch 表达式和语句的模式匹配,以及对模式语言的扩展来增强 Java 编程语言。

2022-07-05

阶段重点投入的 smart-mqtt。 对于smart-mqtt,我们规划通过 GraalVM 将 Java 应用编译成原生镜像,使其更好的部署于边缘场景。该设想存在较多的技术难题需要攻克,而当下面临的问题便是新版 GraalVM 已不再支持 JDK 1.8。Java 1.8 与 11