白狗子的博客

「天上浮云如白衣,斯须改变如苍狗。」——杜甫

JavaScript-面试-垃圾回收

2026年10月16日·Admin·2 次浏览

面试题:JS 垃圾回收大致原理?什么会导致内存泄漏?

主流策略:可达性 + 分代

引擎从 根(全局对象、调用栈上的引用等)出发标记可达对象,不可达则回收。V8 等采用分代 GC(新对象区频繁扫描,老生代少次整理),具体算法(Scavenge、Mark-Sweep、Mark-Compact)了解即可。

常见内存泄漏场景

  1. 忘记解绑:全局缓存 Map、DOM 引用、定时器未 clear。
  2. 闭包持有大对象/ DOM 节点。
  3. 事件监听未 removeEventListener(框架卸载时要对称清理)。
  4. ** detached DOM**:JS 仍引用已从树移除的节点。

WeakMap / WeakSet

弱引用键(WeakMap 对 key),不阻止 GC;适合私有元数据、DOM 节点关联缓存。

开发侧建议

Chrome Memory 快照对比、Performance 看堆;避免无界 cache、长生命周期 setInterval。

© 2025 My Blog. Built with Nuxt.js v4