Skip to main content

浏览器V8工作原理

JavaScript的内存模型和机制

下图是JavaScript的内存模型: JavaScript的内存模型

不同的数据类型会被放在不同的空间

闭包的存储位置

V8中的垃圾回收机制

调用栈中的数据回收

堆中的数据回收

V8如何执行代码

高级语言的执行有两种方式:解释执行和编译执行。

解释执行流程:

编译执行流程:

解释器和编译器

V8执行流程

执行流程

即时编译技术(JIT)

JIT

V8 执行 JavaScript 的流程图:

概括描述:

  1. V8 启动执行 JavaScript 之前,需要准备执行时的一些基础环境:栈和堆空间、全局执行上下文、全局作用域、消息循环系统、内置函数等

  2. 接受 JavaScript 代码,结构化接收的代码,生成AST。与此同时,V8 还会生成这段代码的作用域,作用域中存放相关变量。

  3. 生成字节码

  4. 解释器执行字节码,输出执行结果

  5. V8 监控重复执行代码,标记为热点代码。热点代码的字节码会被优化编译器编译为二进制代码。当热点代码的结构变化后,优化编译器执行反优化操作,退回到解释器执行。