标记清理 — 主流策略:
- 原理:垃圾回收程序运行时,会“标记”内存中所有变量。然后,它会去掉那些“在环境中的变量”以及“被环境中的变量引用的变量”的标记。剩下还被标记的,就是没人用的垃圾,准备销毁。
引用计数 (Reference Counting) —— 历史的教训:
- 原理:记录每个值被引用的次数。次数为 0 就回收。
- 致命缺陷:循环引用 (Circular Reference)。如果对象 A 引用 B,B 又引用 A,它们的引用次数永远是 1,永远回收不掉。
- 实战:早期的 IE 浏览器(IE8 及之前)DOM 对象采用引用计数,这导致了无数内存泄漏的噩梦。虽然现代浏览器解决了这个问题,但在涉及 COM 对象或非常老旧的代码维护时仍需注意。