GraalVM与Java静态编译:原理与应用
上QQ阅读APP看书,第一时间看更新

第4章 从Java程序到本地代码:静态编译应用流程

本章从应用的角度向读者介绍将一个Java应用程序静态编译为二进制可执行文件的过程。在此过程中会陆续引出静态编译中的各个重要组件和概念,读者暂且不必急于了解这些组件和概念的详细内容,我们会在后续章节一一介绍。

应用静态编译的基本流程如图4-1所示。首先获取GraalVM JDK,然后获取目标应用程序及所需的依赖库,接下来用GraalVM JDK预执行目标应用程序获取所有的动态特性配置,最后以目标应用程序、依赖库和动态特性配置作为输入,通过GraalVM JDK中的静态编译启动器native-image启动静态编译框架,编译出二进制本地可执行应用程序文件。本章按以上顺序依次详细介绍各个步骤,阅读完本章,读者会了解Java静态编译所需的工具、流程和具体的操作步骤,并能够依例编译出一个静态Java程序。

047-01

图4-1 静态编译应用流程示意图

本书将GraalVM项目的所有源代码称为GraalVM源码,将GraalVM源码编译后得到的所有二进制可执行文件、库文件和执行脚本构成的整体称为GraalVM JDK,将拟静态编译的Java程序称为目标应用程序,将目标应用程序的所有依赖库文件称为依赖库,将静态编译后的目标应用程序称为二进制可执行应用程序。本书将通过javac编译Java源代码或通过GCC等编译器编译C/C++源代码的过程称为“编译”,将GraalVM JDK编译目标应用程序的过程称为“静态编译”。Substrate VM是GraalVM的静态编译子项目,本书以Substrate VM指代静态编译器框架,以native-image指代静态编译框架的启动器,以native image指代静态编译的输出产品。本章的编译过程是在Windows 10内嵌的Ubuntu 20.04子系统上执行的,其他Linux和Mac平台也可以编译,但是目前还不建议在Windows平台上尝试静态编译。