Javascript V8中与JIT编译的混淆
我在研究V8的内部工作原理时遇到了JIT编译器这个术语。最初,我在本文中读到,V8中的JIT编译器被称为“点火”,它是一个解释器。然后,我得出结论,JIT编译器只是一个解释器。但后来我发现另一篇文章将jit编译描述为解释器和编译器的组合。伙计们,JIT编译器真的是解释器和编译器的结合吗?或者JIT编译器只是解释器而已?V8开发者在这里。为了澄清和扩大评论人士已经指出的内容:Javascript V8中与JIT编译的混淆,javascript,v8,Javascript,V8,我在研究V8的内部工作原理时遇到了JIT编译器这个术语。最初,我在本文中读到,V8中的JIT编译器被称为“点火”,它是一个解释器。然后,我得出结论,JIT编译器只是一个解释器。但后来我发现另一篇文章将jit编译描述为解释器和编译器的组合。伙计们,JIT编译器真的是解释器和编译器的结合吗?或者JIT编译器只是解释器而已?V8开发者在这里。为了澄清和扩大评论人士已经指出的内容: “JIT”意味着“及时”,意味着某些执行环境动态地(即在运行时)决定生成某些东西(通常是机器代码——通俗地说,“JIT”
- “JIT”意味着“及时”,意味着某些执行环境动态地(即在运行时)决定生成某些东西(通常是机器代码——通俗地说,“JIT”倾向于意味着“及时编译”,尽管如果你决定在饿的时候准备一顿饭,吃完后马上吃,那么从技术上讲,这也是“JIT”准备。)规范的反面是像C/C++这样的语言,它是由开发人员编译的,在交付给用户并由用户执行之前很久。另一个不同方向的“反面”是执行环境,它执行某些东西而不动态生成机器代码。这种环境通常被称为“解释器”
- 过去,V8总是产生机器代码。它根本无法执行不首先将其编译为机器代码的JavaScript。显然,这是在客户机上发生的,所以这是一个即时编译器(或者更准确地说,是一组多个编译器…哦,好吧,细节!)的教科书示例
- 近年来,V8已经有了一个解释器作为它的第一个执行层。现在术语的使用变得复杂了,因为这个解释器“及时地”将“JavaScript”编译成字节码(然后进行解释),但当有人说“JIT编译器”时,他们通常意味着它不是解释器
- V8还有一个生成机器代码的优化编译器。它在运行时运行(当函数被认为是热的时候),所以它是一个即时编译器