GraalVM Hello World 程序体积缩小至仅 6.5MB
摘要
GraalVM Community Edition 25.1.3 将原生 Hello World 二进制文件大小缩减至 6.5MB,新增 JIT 编译记录/回放、反汇编工具等功能。
查看缓存全文
缓存时间: 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)
深入技术探讨如何缩小 Zig ELF 二进制文件的大小,从 2180K 缩减至 500 字节以下,通过去除调试信息、切换到 ReleaseSmall 以及使用 freestanding 目标。
字节码虚拟机在意外场景中的应用 (2024)
本文探讨了字节码虚拟机的出人意料的应用,特别是Linux内核中的eBPF以及编译后二进制文件中用于调试信息的DWARF表达式。
mvm - 一个快速的 Go 虚拟机
mvm 是一个快速、可移植的 Go 虚拟机,支持直接从源码运行 Go 程序、嵌入 Go 解释器,并包含 REPL、调试器和标准库。
Tiny-Lua-Compiler: 可能是有史以来最小的 Lua 编译器
Tiny-Lua-Compiler 是一个用于教学的、自举的 Lua 5.1 编译器和虚拟机,完全用纯 Lua 编写。其设计目标是体积足够小以便于研究,同时又功能完备到足以处理真实的语言特性。
@tarunsachdeva: 今晚在试玩 http://zero-native.dev,这玩意儿太疯狂了,一个包含 WebView 的原生 Mac 应用居然只有... 680KB
Zero-native 是一个新工具,用于使用 Zig 和 WebView 构建轻量级原生桌面应用,生成的二进制文件小于 1MB,支持快速重新构建并可直接访问 C 库。