Native-Image在构建镜像时的七步都在干嘛?

140 阅读1分钟

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” 这个可执行文件和一份构建产物的文本文件。