【问题标题】:The confusion with how V8 engine works对 V8 引擎工作方式的困惑
【发布时间】:2019-11-14 09:27:11
【问题描述】:

我是 JS 新手,正在学习 V8 引擎如何在幕后工作。 V8 生成字节码而不是机器码是真的吗?我的意思是,在ignition生成字节码后,再通过profiler分析字节码进行改进,然后再通过编译器(Turbofan)对字节码进行分析优化,即TurboFan是从字节码中生成机器码还是生成优化后的字节码?

【问题讨论】:

    标签: javascript v8


    【解决方案1】:

    V8 开发人员在这里。 Turbofan 生成优化的机器代码。

    【讨论】:

    • 感谢您的友好回答,好的,两个问题。首先,我需要点火是对的吗,因为它有助于更​​快地编译代码,并且由于点火,最终的机器代码将变得紧凑且内存高效?其次,探查器是否真的监控点火,而点火正在生成字节码以查找优化,并且只有在生成字节码后,编译器才开始工作并优化代码。我真的希望你的好心cmets)))
    • Re 1,JavaScript 的优化需要在未优化执行期间收集类型反馈;点火是几种可能的方法之一。 Re 2,不,不监控字节码生成。分析器监控执行字节码并最终触发热函数的优化编译。
    • Re 1,好的,我在medium.com/@MQuy90/v8-engine-overview-7c965731ced4 中读到需要 Ignition,因为它生成的字节码是 JIT 编译器先前生成的大小的 25% 到 50%。因此,当编译器获取该字节码并将其编译为机器码时,代码的大小会更小,对吧? Re 2,好的,在通过点火生成字节码之后,然后执行该字节码并且分析器负责优化分析,然后将字节码的分析提供给编译器以输出最终优化的机器码。对吗?
    • Re 1,字节码的大小不会以任何方式影响优化代码的大小。该帖子中引用的数字将 Ignition 的字节码与由 Ignition 替换的非优化编译器生成的未优化机器代码进行了比较。点火本身不是“需要的”;这是一个比我们以前更好的解决方案。 Re 2,分析器只选择要优化的函数,优化编译器进行优化。它不分析字节码,而是从字节码构建自己的 IR,然后对其进行分析/转换。
    • 我看了你链接的那篇文章,发现它很混乱。如果您阅读我们在 v8.dev/blog/ 上的文章,我想您可能会得到更好的理解。
    猜你喜欢
    • 2012-08-24
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-10
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    相关资源
    最近更新 更多