当前位置: 首页 > 知识库问答 >
问题:

使用本机映像编译的松露解释器AOT如何进行PE?

乐正瑞
2023-03-14

使用原生图像来改善松露解释器的启动时间似乎很常见。

我的理解是,使用本机映像的AOT编译将导致方法编译为在专用子虚拟机中运行的本机代码。

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

这就是我感到困惑的地方。如果我们通过原生图像传递一个 Truffle 解释器,则每个节点方法的代码将是原生代码。那么,PE如何进行呢?事实上,格拉尔甚至在基底VM中是否可用?

共有1个答案

东方谦
2023-03-14

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

 类似资料:
  • 为每种语言预构建一个单独的应用程序包 服务适当的应用程序包 :语言环境的名称

  • 问题内容: 我在编译代码时收到一条消息: 如何重新编译? 问题答案: 在javac的命令行上指定它: javac -Xlint:unchecked 或者,如果您使用的是Ant,请修改您的javac目标 如果您使用的是Maven,请在

  • 我的应用程序位于Quarkus框架之上。该应用程序的主要功能是简单的REST API,用于安排一些任务(现在它只是将一些消息发布到日志中)。 调度功能是我用Quartz framework实现的,通常情况下,当应用程序收到安排新事件的POST请求时,它会做两件事: 将实体从请求保存到数据库 在JSON中提到的日期和时间上安排Quartz作业 此外,当应用程序刚刚启动时,我创建了从数据库中获取所有实

  • 这个问题与android系统有关。Dalvik VM使用JIT概念,这意味着当您第一次运行应用程序时,Dalvik VM编译它并加载到RAM中,只要它能留在那里。我理解这个概念。而新的称为ART的虚拟机则使用AOT方法。ART编译应用程序后,你安装它(或当你正在安装它?)。这意味着什么?ART编译的应用程序与已编译的应用程序(如C应用程序)相同,但运行在与其他操作系统分离的独立进程中?谁能更透彻地

  • 翻译的结果是什么?它会把高级语言变成汇编语言还是机器语言,即二进制代码? 如果是后者,这是否意味着解释语言与介绍集没有关系? 一种语言只能有一个口译员?是因为解释器不做任何优化,所以我们不需要找到更好的解释器吗?

  • 问题内容: 为什么我们说Java是一种编译和解释语言? (编译和解释)这样做有什么好处? 问题答案: Java在编译时被编译为中间的“字节码”。这与像C之类的语言在编译时被编译为机器语言相反。Java字节代码无法像编译的C代码那样直接在硬件上执行。相反,字节码必须在运行时由JVM(Java虚拟机)解释才能执行。像C这样的语言的主要缺点是,当编译该二进制文件时,该二进制文件将仅在一种特定的体系结构(