GraalVM Hello World 程序体积缩小至仅 6.5MB

Lobsters Hottest 工具

摘要

GraalVM Community Edition 25.1.3 将原生 Hello World 二进制文件大小缩减至 6.5MB,新增 JIT 编译记录/回放、反汇编工具等功能。

<p><a href="https://lobste.rs/s/paoclp/graalvm_hello_world_program_down_just_6">评论</a></p>
查看原文
查看缓存全文

缓存时间: 2026/07/01 22:05

GraalVM CE 25.1.3 将 Native Image “Hello World” 程序压缩至仅 6.5MB

来源:https://www.phoronix.com/news/GraalVM-Community-25.1.3
编程

GraalVM,这款专注于提前(AOT)Native Image 编译的高级 JDK,自去年开始将重心转向更多非 Java 语言(如 Python 和 JavaScript),现已发布最新的社区功能版本。GraalVM Community Edition 25.1.3 现已推出,带来了一些有趣的变更。

GraalVM 25.1.3 新增了对使用 Graal 编译器录制和回放 JIT 编译的支持,添加了新的反汇编工具,并为不受信任的代码提供了可选的常量盲化支持。此外,还有性能改进、调试增强、兼容性提升、Linux 构建现在默认生成位置无关可执行文件(PIE),以及其他增强功能。同时,作为 JavaScript 方案的 GraalJS 和 Python 方案的 GraalPy 也获得了更好的语言支持,新增了更多特性。

GraalVM 25.1.3 还引入了 Web Image,这是一个新的实验性后端,用于 GraalVM Native Image,它可以将 Java 应用程序提前编译为带有 JavaScript 包装器的 WebAssembly 模块。

最让我惊讶的是列表中关于通过进一步压缩来减小 Native Image 大小的变更:

“通过压缩镜像堆元数据和存储(包括模块元数据、运行时动态访问元数据和符号表数据),并对简单的常量 String.format 和 String::formatted 调用进行内联优化,减小了 Native Image 的大小。这使得 Linux AMD64 上的 HelloWorld 应用程序大小降至 ~6.5 MB。”

也就是说,让我惊讶的是,一个基本的“Hello World”程序居然能压缩到**~6.5MB**……也许是因为习惯了其他语言,但一个“Hello World”程序的二进制文件有 6.5MB?!我很好奇之前 HelloWorld 的 AMD64 Linux 构建有多大,于是翻查了一下相关活动。Graal 的大部分开发工作都在 Oracle 的门后,但 这个 pull request(https://github.com/oracle/graal/pull/13670)提出了一个关于大小影响的公开问题。本次发布中的额外 Native Image 压缩“总体上应该能带来约 1-2% 的镜像大小缩减”。随后进一步详细说明(https://github.com/oracle/graal/pull/13670#issuecomment-4670741703):

“总体而言,你会看到 25.1 版本相比 25.0.x 版本在镜像大小上有更大的改进,因为我们在这一领域做了几项较小的优化(有些仍在进行中),这些优化累积起来效果明显。同时,由于表示形式更加紧凑,对 RSS(驻留集大小)也有较小的正面影响。由于 String format 内联优化,你会看到 helloworld 镜像大小出现了非常大的下降。”

但即便如此,将 HelloWorld 应用压缩到 6.5MB;是只有我觉得这对于除了最复杂的“hello world”程序之外仍然显得臃肿吗?

GraalVM Community 25.1.3 版本的下载和更多详情可以通过 GitHub(https://github.com/graalvm/graalvm-ce-builds/releases/tag/graal-25.1.3)获取。

相似文章

Zig ELF 二进制文件代码高尔夫 (2025)

Lobsters Hottest

深入技术探讨如何缩小 Zig ELF 二进制文件的大小,从 2180K 缩减至 500 字节以下,通过去除调试信息、切换到 ReleaseSmall 以及使用 freestanding 目标。

mvm - 一个快速的 Go 虚拟机

Lobsters Hottest

mvm 是一个快速、可移植的 Go 虚拟机,支持直接从源码运行 Go 程序、嵌入 Go 解释器,并包含 REPL、调试器和标准库。