Skip to content

垃圾回收(Garbage Collection)

垃圾回收(GC)是自动内存管理机制,它会回收“已经不可能再被使用”的对象。

引用计数(Reference Counting)

最简单的做法是给每个对象一个计数:

  • 有一个新引用指向它,计数 +1。
  • 引用消失,计数 -1。
  • 计数为 0 时释放。

问题是:循环引用会让计数永远不为 0。

javascript
let a = {};
let b = {};
a.other = b;
b.other = a;

可达性分析(Tracing / Mark & Sweep)

现代 JS 引擎通常采用“可达性分析”:

  • 以全局对象、调用栈等为根(root)。
  • 从根出发,能到达的对象都“活着”。
  • 无法到达的对象就是垃圾。

这种方法能处理循环引用。

内存泄漏(Memory Leak)

即使有 GC,也可能泄漏:对象一直“可达”,但逻辑上早已没用。

常见原因:

  • 全局变量过多。
  • 事件监听未移除。
  • 缓存无限增长。
  • 闭包长时间持有大对象。

简单建议

  • 用完的引用设为 null
  • 给缓存设置上限。
  • 事件监听及时移除。
  • 临时映射用 WeakMap / WeakSet

进一步阅读

理解 GC 与引用,会帮助你理解“对象生命周期”和性能问题。

CC-BY 4.0 Licensed