图解Google V8 之 V8是如何执行一段js代码的

293 阅读1分钟

解释执行:将输入的源代码通过解析器编译成中间代码,之后直接使用解释器解释执行中间代码 编译执行:将源代码转换为中间代码,编译器再将中间代码编译成机器代码(二进制文件),直接执行二进制文件

v8混合编译执行和解释执行两种手段,成为JIT技术,just in time

image.png

步骤:

  1. 接收要执行的源码,结构化这段字符串,生成AST,便于v8理解,同时生成相关的作用域,作用域存放相关的变量
  2. 生成字节码,字节码是介于AST和机器码的中间代码,解释器可以直接执行字节码,或者通过编译器将其编译成二进制的机器码再执行
  3. 在解释执行字节码的过程中,如果发现了某一段代码会被重复多次执行,监控机器人就会将这段代码标记为**热点代码 **
  4. 某段代码被标记为热点代码后,v8就会将这段字节码丢给优化编译器 ,在后台将字节码编译为二进制代码,再优化,优化后的二进制机器码的执行效率会大幅提升。再执行到这段代码时,v8会优先选择优化之后的二进制代码
  5. 如果某些被优化的结构被动态修改了,会导致之前被优化的代码失效,需要编译器执行反优化操作