JS引擎V8
2024-12-17 00:00:11  阅读数 666

JS引擎可以将JS代码编译为不同CPU(Intel、ARM以及MIPS等)对应的汇编代码

v8核心模块


Parser

负责将JavaScript源码转换成AST(Abstract Syntax Tree)

Ignition —> Interpreter

负责将AST转换成ByteCode,解释执行ByteCode

为什么要使用字节码?不直接转成机器码执行?

机器码所占内存远远大于字节码,使用字节码可以减少内存使用。

字节码介于AST与机器码之间。

TurboFan —> Compiler

编译器。将ByteCode转换成优化的机器码,下次无需转换ByteCode直接调用

Orinoco —> Garbage Collector

垃圾回收模块,回收不再需要的内存空间

图中的红线代表DeOptimization,Ignition收集的错误信息将不进行Optimization,DeOptimization成Bytecode执行

如果函数没有被调用,那么V8不会去编译它

Just-in-time complication (JIT)

TurboFan所做的也不只是根据类型信息来简化代码执行流程,它还会进行其他优化,比如减少冗余代码等更复杂的事情

强大的垃圾回收功能也是v8提高性能的关键之一。在避免js执行的情况下,同时回收内存空间,提高内存利用效率

The higher the language is, the slower it is!