graal java
引用:博客上的专题图片可以在flickr上找到,并由Luca Galli创建。 以下部分之一中的图像也可以在flickr上找到,并由fklv(过时的时髦)创建。
GraalVM编译器替代了HotSpot的服务器端JIT编译器 ,该编译 器被广泛称为C2编译器 。 它是用Java编写的,目的是与C2编译器相比,具有更好的性能(除其他目标外)。 从Java 9开始的新更改意味着现在有了JVMCI ,我们就可以将自己的手写C2编译器插入JVM。 Oracle实验室的研究人员和工程师)创建了启用JVMCI的JDK8变种,可用于构建GraalVM编译器 。 GraalVM编译器是开源的, 可在GitHub上使用 (以及构建GraalVM编译器所需的HotSpot JVMCI源代码 )。 这使我们能够分叉/克隆它并构建我们自己的GraalVM编译器版本。
在本文中,我们将在CircleCI上使用JDK8构建GraalVM编译器 。 产生的工件将是:
–嵌入GraalVM编译器的JDK8 ,以及
–包含Graal&Truffle模块/组件的zip存档。
注意:本文不讨论如何构建整个GraalVM套件,这可以通过另一篇文章来完成。 尽管可以使用这些脚本,但是存在一个 包含其余步骤 的 分支。
为什么要使用CI工具来构建GraalVM编译器?
![](https://i-blog.csdnimg.cn/blog_migrate/64ca9bef93a6dd8e8f41c90d53967ae2.png)
持续集成(CI)和持续部署(CD)工具有很多好处。 最大的功能之一就是能够检查代码库的运行状况。 了解构建失败的原因,可以为您提供更快进行修复的机会。 对于这个项目,重要的是我们能够验证和验证在本地和Docker容器中构建用于Linux和macOS的GraalVM编译器所需的脚本。
CI / CD工具使我们可以添加自动化测试,以确保在合并每个PR时,可以从脚本中获得所需的结果。 除了确保我们的新代码不会带来重大变化之外,CI / CD工具的另一个重要功能是我们可以自动化二进制文件的创建和这些二进制文件的自动部署,从而使它们可用于开源分发。
让我们开始吧
在研究CircleCI作为构建GraalVM编译器的CI / CD解决方案的过程中,我了解到可以通过两种不同的方法来运行构建,即:
–使用标准Docker容器的CircleCI构建(更长的构建时间,更长的配置脚本)
–带有预先构建的,优化的Docker容器的CircleCI构建(更短的构建时间,更短的配置脚本)
现在,我们将通过上面提到的两种方法,来了解两种方法的利弊。
方法1:使用标准Docker容器
对于这种方法,CircleCI需要一个Docker映像,该映像可在Docker Hub或它有权访问的另一个公共/私有注册表中使用。 为了成功构建,我们将必须在此可用环境中安装必要的依赖项。 我们希望构建第一次运行会更长,并且根据缓存级别的不同,它将加快运行速度。
要了解如何做到这一点,我们将通过CircleCI配置文件中去节逐节(存储在.circleci / circle.yml),见config.yml在.circleci的完整列表,请参阅提交df28ee7为源变化。
解释配置文件的各个部分
配置文件中的以下几行将确保缓存我们已安装的应用程序(指两个特定的目录),这样我们就不必在每次构建时都重新安装依赖项:
dependencies:
cache_directories:
- "vendor/apt"
- "vendor/apt/archives"
我们将通过其全名来引用Docker映像(在http://hub.docker.com上可使用所使用的帐户名– acceptopenjdk )。 在这种情况下,这是一个包含JDK8的标准docker映像,由Adopt OpenJDK构建场背后的好人提供。 从理论上讲,只要支持构建过程,我们就可以使用任何图像。 它将充当我们将在其上安装必要依赖项的基础层:
docker:
- image: adoptopenj