JavaScript-面试-垃圾回收
2026年10月16日·Admin·2 次浏览
面试题:JS 垃圾回收大致原理?什么会导致内存泄漏?
主流策略:可达性 + 分代
引擎从 根(全局对象、调用栈上的引用等)出发标记可达对象,不可达则回收。V8 等采用分代 GC(新对象区频繁扫描,老生代少次整理),具体算法(Scavenge、Mark-Sweep、Mark-Compact)了解即可。
常见内存泄漏场景
- 忘记解绑:全局缓存 Map、DOM 引用、定时器未 clear。
- 闭包持有大对象/ DOM 节点。
- 事件监听未
removeEventListener(框架卸载时要对称清理)。 - ** detached DOM**:JS 仍引用已从树移除的节点。
WeakMap / WeakSet
弱引用键(WeakMap 对 key),不阻止 GC;适合私有元数据、DOM 节点关联缓存。
开发侧建议
Chrome Memory 快照对比、Performance 看堆;避免无界 cache、长生命周期 setInterval。