js底层实现
JavaScript 引擎的基本架构
JavaScript 引擎的核心是将高级代码转换为机器可执行的指令。现代引擎如 V8、SpiderMonkey 采用分层架构:解释器快速生成字节码,优化编译器分析热点代码生成高效机器码。V8 的 Ignition 解释器与 TurboFan 优化编译器是典型组合。
内存管理机制
引擎通过垃圾回收(GC)管理内存。标记-清除算法是主流方案:遍历对象图标记活动对象,清除未标记的垃圾。V8 采用分代式 GC,将堆分为新生代和老生代,分别使用 Scavenge 和标记-压缩算法。写屏障技术处理跨代引用。
事件循环模型
JavaScript 运行时依赖事件循环实现异步。任务分为宏任务(script、setTimeout)和微任务(Promise)。每轮循环执行一个宏任务后,清空微任务队列。Node.js 使用 libuv 扩展了事件循环阶段,包含定时器、I/O 回调等六个阶段。
原型继承实现
对象通过隐藏属性 __proto__ 链接原型。函数对象的 prototype 属性在 new 操作时赋值给实例的 __proto__。V8 使用隐藏类优化属性访问,相同形状的对象共享隐藏类,通过偏移量快速定位属性。
JIT 编译优化
即时编译通过分析执行轨迹优化代码。内联缓存存储热点路径的类型信息,TurboFan 基于此生成特化机器码。逃逸分析确定对象作用域,优化内存分配。去虚拟化将多态调用转为静态调用。
类型系统处理
JavaScript 使用动态类型,引擎内部维护类型标签。V8 对 31 位整数使用 Smi 编码,其他数字用 HeapNumber 表示。ToPrimitive 等抽象操作处理隐式类型转换,涉及 valueOf 和 toString 方法调用。

作用域与闭包
词法环境存储标识符绑定,形成作用域链。闭包通过保留外部环境引用实现。V8 的闭包分析决定变量分配方式:能优化的变量放入栈或上下文,否则进入堆分配。






