前端知库

垃圾回收为什么无法自动解决所有内存泄漏?

参考答案

现代 JavaScript 引擎主要依据可达性判断对象是否仍可能被使用:从根对象可沿引用链到达的对象通常会保留。循环引用本身不意味着泄漏;不可达的循环结构仍可被回收。

泄漏常见于全局缓存无上限增长、未移除的监听器、长期运行的计时器、闭包保留大对象及脱离文档的 DOM 被引用。修复的核心是缩短不必要引用的生命周期,或为缓存设置明确容量与过期策略。

可以重复执行同一操作,比较堆快照的 retained size 和引用路径。FinalizationRegistry 与 WeakRef 的时机不确定,不应用于必须及时执行的资源清理。性能优化也不能依赖“某时刻必定发生 GC”的假设。