【发布时间】:2020-01-19 07:10:56
【问题描述】:
我在研究 V8 的内部工作原理时遇到了 JIT 编译器这个术语。最初,我在这篇文章https://www.quora.com/How-does-the-JIT-compiler-work-in-JS 中读到,V8 中的 JIT 编译器称为“Ignition”,它是解释器。然后,我得出结论,JIT 编译器只是解释器。但后来我发现另一篇文章https://blog.logrocket.com/how-javascript-works-optimizing-the-v8-compiler-for-efficiency/ 将jit-compilation 描述为解释器和编译器的组合。伙计们,JIT 编译器真的是解释器和编译器的组合吗?还是 JIT 编译器只是解释器?
【问题讨论】:
-
及时____? (填空;平凡的可以排除最后一题的假设之一)
-
发出机器码的JIT“编译器”是TurboFan; Ignition 表示内部字节码,尽管从 AST 编译到该字节码,但实际上并不认为是 JIT,因为它不直接针对机器硬件。 (相比之下,Java 需要一个显式的字节码编译步骤,在执行期间是 JIT 的。)
-
@user2864740,感谢您的好心 cmets,所以您的意思是 jit 编译器实际上并不是解释器和编译器的组合,而是编译器本身优化了我们的代码。是对的吗?如果是,那为什么会及时调用呢?
-
@Mita 因为它在代码执行时动态优化,而不是在应用程序运行之前,如 Ahead of Time (AOT) 编译器。您可以在 C 中看到 AOT,例如,您首先 编译应用程序并然后 运行它。 JIT 本质上是相反的。
标签: javascript v8