首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >V8是执行由解释器生成的Byte代码还是由涡轮风扇编译器生成的二进制代码?

V8是执行由解释器生成的Byte代码还是由涡轮风扇编译器生成的二进制代码?
EN

Stack Overflow用户
提问于 2021-09-12 17:12:14
回答 1查看 939关注 0票数 2

我对v8是如何工作的以及它如何执行js代码感到困惑。

我理解v8首先解析代码并创建AST,然后将它引入解释器作为输入并生成字节代码,然后引入到涡轮风扇编译器中,将中间代码转换为计算机理解的机器代码。

我正在阅读一个关于这个话题的文章,这是一个很好的话题,但事实证明,有些东西让我感到困惑。

  1. 执行阶段:字节码通过使用内存堆和V8引擎运行时环境的调用堆栈来执行

我认为机器代码是被执行的代码,否则,如果字节代码是执行的,那么为什么我们需要创建该代码呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-12 21:23:31

(这里是V8开发人员。)

为了证实@Bergi在他的评论中说了什么:字节码主要用于由解释器执行,这实际上是执行JavaScript所需的全部内容。V8 (现在)并不是将所有函数编译成机器代码,只有那些运行热到可以优化编译以(可能)值得花费时间的函数。作为实现的一个特殊细节,优化编译器使用字节码作为输入,这为字节码提供了一个次要的用途;但这实际上只是一个可以以不同方式解决的细节,例如在优化编译器启动时,将原始源代码再次解析为AST,这是V8几年前以前一直使用的方法。

(您所链接的那篇文章确实提到了这些概念中的大多数,但我同意它写的有些令人困惑,我不同意它的一些特征。参见v8.dev/blog,以获得关于事物工作方式的官方描述。)

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69153645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档