对于使用本机图像进行 AOT 编译的 Truffle 解释器,PE 如何发生?

How does PE take place for a Truffle interpreter AOT-compiled with native-image?

使用 native-image 来改善 Truffle 解释器的启动时间似乎很常见。

我的理解是,使用 native-image 进行 AOT 编译会导致在专用 SubstrateVM 中将方法编译为 运行 的本机代码。

此外,Truffle 框架依赖于动态收集的分析信息来确定要部分评估哪些节点树。该 PE 的工作原理是获取相关节点的 JVM 字节码,并在 Graal JIT 编译器的帮助下对其进行分析。

这就是我感到困惑的地方。如果我们通过 native-image 传递一个 Truffle 解释器,每个节点方法的代码将是本机代码。那么PE如何进行呢?事实上,Graal 甚至可以在 SubstrateVM 中使用吗?

除了解释器的本机代码外,SVM还在图像中存储了解释器的表示(一组符合解释器的方法)用于部分评估。这种表示的格式不是 JVM 字节码,而是已经解析为 Graal IR 形式的图形。 PE 在这些图上运行,生成更小的优化图,然后将这些图提供给 Graal 编译器,所以是的,SVM 也在本机映像中提供了 Graal 编译器。 为什么是 Graal 图而不是字节码?过去使用字节码,但是直接存储图节省了(字节码到Graal IR)解析步骤。