注:本文是学习笔记,仅供个人学习使用。

    V8 主要核心流程分为编译和执行两步。首先需要将 JavaScript 代码转换为低级中间代码或者机器能够理解的机器代码,然后再执行转换后的代码并输出执行结果。

    V8 原理 - 图1

    V8 并没有采用某种单一的技术,而是混合编译执行和解释执行这两种手段,我们把这种混合使用编译器和解释器的技术称为 JIT(Just In Time)技术。

    这是一种权衡策略,因为这两种方法都各自有自的优缺点,解释执行的启动速度快,但是执行时的速度慢,而编译执行的启动速度慢,但是执行时的速度快。你可以参看下面完整的 V8 执行 JavaScript 的流程图:

    V8 原理 - 图2

    流程如下:

    1. 初始化基础环境;
    2. 解析源码生成 AST 和作用域;
    3. 依据 AST 和作用域生成字节码;
    4. 解释执行字节码;
    5. 监听热点代码;
    6. 优化热点代码为二进制的机器代码;
    7. 反优化生成的二进制机器代码。