使用native-image来缩短Truffle解释器的启动时间似乎很普遍。
我的理解是,使用本机图像进行AOT编译将导致将方法编译为在专用SubstrateVM中运行的本机代码。
此外,Truffle框架依赖于动态收集的概要分析信息来确定要部分评估的节点树。该PE通过获取有问题的节点的JVM字节码并在Graal JIT编译器的帮助下进行分析来进行工作。
这是我感到困惑的地方。如果我们通过本机图像传递Truffle解释器,则每个节点方法的代码将是本机代码。那么,PE如何进行?实际上,Graal甚至可以在SubstrateVM中使用吗?
答案 0 :(得分:4)
除了解释器的本机代码外,SVM还在图像中存储了解释器的表示形式(符合解释器的一组方法),以进行部分评估。此表示形式的格式不是JVM字节码,而是已解析为Graal IR形式的图形。 PE在这些图上运行,生成甚至更小的,优化的图,然后将其馈送到Graal编译器,因此SVM也在本地映像中附带了Graal编译器。 为什么使用Graal图而不是字节码?过去使用字节码,但是直接存储图形可以节省(将字节码保存到Graal IR中)解析步骤。