0Pricing
Java Academy · 课时

构建原生映像

提前编译

构建原生映像 是 CoddyKit 上的免费 Java Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Java Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Java Academy 课程共包含 4 节课。

构建原生映像

native-image 工具会将已编译的 Java 字节码转换为单个自包含的原生可执行文件。本课将介绍构建过程、底层发生的事情,以及如何运行构建结果。

从普通 Java 开始

原生映像构建始于普通的已编译类。下面是一个我们将设想编译为原生代码的简单程序。

public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello from a native binary!");
    }
}

先编译,再构建

这包括两个步骤:首先,javac Hello.java 生成 Hello.class;然后,native-image Hello 生成名为 hello 的可执行文件。构建过程比编译慢得多,因为它需要分析整个程序。

封闭世界分析

原生映像工具会执行封闭世界分析:它必须看到所有可能运行的代码。从 main 开始,它会遍历每个可达方法,只将这些方法包含在二进制文件中。任何不可达的内容都会被移除(链接时执行的死代码消除)。

提前编译

可达方法会提前编译为原生机器码。由于不再有需要解释的字节码,也没有即时编译器,因此同样没有预热过程——程序从第一条指令开始就会以全速运行。

构建时初始化

为了快速启动,原生映像工具可以在构建时运行静态初始化器,并将生成的堆预先写入映像中(即映像堆)。这意味着程序启动的瞬间,某些对象就已经存在。

运行可执行文件

输出结果是普通的 OS 可执行文件。您可以直接运行它——不需要 java -jar,目标机器也不需要安装 JVM。根据所使用的标志,它可以是完全静态链接或大部分静态链接。

常用构建标志

实用选项包括:

  • -o name — 输出文件名。
  • --no-fallback — 失败,而不是生成依赖 JVM 的回退映像。
  • -O2 / -O3 — 优化级别。
  • --static — 完全静态链接的二进制文件(Linux)。

内存与磁盘

构建本身非常耗费内存——大型应用程序可能需要数 GB 的 RAM 和数分钟的 CPU 时间。这项成本只在构建时支付一次,换来运行时低成本且快速的启动。

通过 Maven/Gradle 构建

在实际项目中,您很少会手动调用 native-image。GraalVM 的原生构建工具插件会将其集成到 Maven(native:compile)和 Gradle(nativeCompile)中,使二进制文件成为常规构建流程的一部分。

验证启动速度

构建完成后,请比较启动速度:java -jar 启动可能需要数百毫秒,而原生二进制文件只需个位数毫秒即可返回。测量这种差异正是采用原生构建的全部意义。

快速检查

检查您对构建原生映像的理解。

回顾

您了解了原生映像的构建过程:

  • 从已编译的字节码开始;native-image 会生成自包含的可执行文件。
  • 封闭世界分析会找出从 main 可达的全部代码。
  • 可达代码会进行AOT 编译;不可达代码会被移除。
  • 构建时初始化会预先写入映像堆,以实现快速启动。
  • 构建过程缓慢且耗费内存;请通过 Maven/Gradle 插件将其集成起来。

常见问题解答

「构建原生映像」课时是免费的吗?

是的 — 「构建原生映像」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Java Academy 课程的其余内容,请升级到 CoddyKit PRO。 Java Academy 课程共包含 4 节课。

「构建原生映像」这节课中我会学到什么?

提前编译 你通过在浏览器中直接运行的动手代码来练习 Java Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Java Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Java Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「构建原生映像」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Java Academy 课中编写并运行代码吗?

能。每节 Java Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 什么是 GraalVM
  2. 构建原生映像
  3. 反射与配置
  4. 原生映像的权衡
← 返回 Java Academy