解释执行:将输入的源代码通过解析器编译成中间代码,之后直接使用解释器解释执行中间代码 编译执行:将源代码转换为中间代码,编译器再将中间代码编译成机器代码(二进制文件),直接执行二进制文件
v8混合编译执行和解释执行两种手段,成为JIT技术,just in time
步骤:
- 接收要执行的源码,结构化这段字符串,生成AST,便于v8理解,同时生成相关的作用域,作用域存放相关的变量
- 生成字节码,字节码是介于AST和机器码的中间代码,解释器可以直接执行字节码,或者通过编译器将其编译成二进制的机器码再执行
- 在解释执行字节码的过程中,如果发现了某一段代码会被重复多次执行,监控机器人就会将这段代码标记为**热点代码 **
- 某段代码被标记为热点代码后,v8就会将这段字节码丢给优化编译器 ,在后台将字节码编译为二进制代码,再优化,优化后的二进制机器码的执行效率会大幅提升。再执行到这段代码时,v8会优先选择优化之后的二进制代码
- 如果某些被优化的结构被动态修改了,会导致之前被优化的代码失效,需要编译器执行反优化操作