Native-Image在构建镜像时的七步:
[1/7] Initializing...
[2/7] Performing analysis...
[3/7] Building universe... (5.1s @ 4.41GB)
[4/7] Parsing methods... (6.0s @ 1.35GB)
[5/7] Inlining methods... (2.1s @ 3.77GB)
[6/7] Compiling methods... (29.4s @ 2.24GB)
[7/7] Creating image...
1、初始化:设置并检查环境,如 Java 版本信息,C 编译器,垃圾收集器等。同时确定了一些在构建时就可以确定的字段的值,这些字段包括各种库的存在情况和功能。
2、分析:检查和分析所有的类、字段和方法,确定哪些是可达的(在程序运行时可能会用到的)。同时,还注册了需要在运行时进行反射操作的类、字段和方法,以及需要在 JNI 中访问的类、字段和方法。
3、构建宇宙:这是 GraalVM 中的一种抽象概念,涉及到对 Java 对象的模型进行建模。在这一步中,GraalVM 创建了一个包含所有可达对象的 “宇宙”。
4、解析方法:在这一步中,GraalVM 解析所有的方法,并把它们转化为 GraalVM 可以理解的中间表示。
5、内联方法:对方法进行优化,其中一个重要的优化就是方法内联。方法内联可以减少方法调用的开销,并且为其他优化技术(如死代码消除)提供可能。
6、编译方法:在这一步中,GraalVM 把所有的方法编译成本地机器码。
7、创建映像:最后,GraalVM 把所有的代码、数据和资源打包成一个单一的可执行文件。
构建完成后,输出了相关的构建信息和统计数据,最终生成了 “hello_graalvm” 这个可执行文件和一份构建产物的文本文件。