标记清理 — 主流策略

  • 原理:垃圾回收程序运行时,会“标记”内存中所有变量。然后,它会去掉那些“在环境中的变量”以及“被环境中的变量引用的变量”的标记。剩下还被标记的,就是没人用的垃圾,准备销毁。

引用计数 (Reference Counting) —— 历史的教训

  • 原理:记录每个值被引用的次数。次数为 0 就回收。
  • 致命缺陷循环引用 (Circular Reference)。如果对象 A 引用 B,B 又引用 A,它们的引用次数永远是 1,永远回收不掉。
  • 实战:早期的 IE 浏览器(IE8 及之前)DOM 对象采用引用计数,这导致了无数内存泄漏的噩梦。虽然现代浏览器解决了这个问题,但在涉及 COM 对象或非常老旧的代码维护时仍需注意。