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-07-28

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

2022-07-05

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

2022-06-28

为参考对比,还加入了两个替代实现方案:OpenJ9 和 GraalVM CE。 测试环境: 搭载 Intel Core i5 12600K CPU、运行 Ubuntu 22.04 LTS 的电脑 参与测试的所有 OpenJDK 构建均来自官方 OpenJDK 二进制文件,并使用测试时的最新版本 为了

2022-06-01

已发布。此版本包括 12 个 bug 修复、文档改进以及对 GraalVM 22.1、Spring Boot 2.7.0 和 Spring Cloud 2021.0.3 的依赖项升级。 Spring Native(前身为 Spring GraalVM Native,Spring 社区试验性项目)通过使用 GraalVM 原生镜像编译器将 Spring 应用程

2022-09-21

JDK 19 / Java 19 已正式发布。 新版本总共包含 7 个新的 JEP: 405: Record Patterns (Preview) 422: Linux/RISC-V Port 424: Foreign Function & Memory API (Preview) 425: Virtual Threads (Preview) 426: Vector API (Fourth Incubator) 42

2022-08-21

actId> <version>2.0.12</version> </dependency> GraalVM版本 <dependency> <groupId>com.alibaba.fastjson2</groupId> <artifactId>fastjson2</artifactId> <version>2.0.12.graal</version> </dependency> Android版

2022-09-22

Mesa 22.2.0 原计划应在 8 月底或 9 月初发布,但在过去的一个月里,它一直没有发布。如今 Mesa 22.2 姗姗来迟正式发布。Mesa 22.2 的主要更新内容包括: 英特尔 DG2 Vulkan 光线追踪代码的性能得到了很大的改善,达到了约 100 倍。

2022-09-15

面做出了重大改进。“我们希望它也能为更大的 JavaScript 社区做出贡献”。 Facebook.com 在 2020 年被重新设计为单页应用程序 (SPA),该应用程序的大部分渲染和导航使用客户端 JavaScript。而 Meta 的大多数其他流行网络应用程序都使

2022-04-15

NET 7 Preview 3 已发布, .NET 7 的第三个预览版包括对可观察性、启动时间、代码生成、GC 区域、Native AOT 编译等方面的增强。 Native AOT 编译 Native AOT 的主要优势在于启动时间、内存使用、访问受限平台(不允许 JIT)以及磁盘

2022-09-05

工具,适用于开发人员和数据库管理员。 DBeaver 22.2 现已发布,更新内容如下: Data editor: 添加了嵌入式浏览器(Edge vs IE)配置 改进了记录模式下的自定义数据类型呈现 控制台查看器切换已在 Linux/MACOS 上修复 改进

2022-07-11

factId> <version>2.0.9</version> </dependency> GraalVM版本 <dependency> <groupId>com.alibaba.fastjson2</groupId> <artifactId>fastjson2</artifactId> <version>2.0.9.graal</version> </dependency> Android版本

2022-07-05

,无须安装其它依赖。 版本0.1.0 基础功能说明 Wooca目前发布出来的版本是0.1.0。该版本实现了对Wooca的基础设想,也就是对SpringBoot应用的运行状态的管理。主要功能如下: 创建Wooca项目,选择一个空白的目录,即可创建一个

2022-03-01

Go 语言社区正在讨论名为「arena」的新提案。 根据提案的介绍,「Go arena」用于优化内存分配。arena 是一种从连续的内存区域分配一组内存对象的方法,其优点是从 arena 分配对象通常比一般内存分配更有效。更重要的是,a

2022-06-04

验证和 TCK 认证的二进制文件在整个 Java 生态系统中普遍使用。” Adoptium 工作组是由阿里云、Azul、华为、IBM、iJUG、Karakun AG、Microsoft、New Relic、Red Hat 等众多 Java 开发者和厂商共同发起的,旨在为 Java 生态系统提供了完全兼容