【发布时间】:2014-12-22 18:35:11
【问题描述】:
我使用 knockout.js 和其他地图、网格开源库创建了一个单页应用程序。
我注意到我有内存泄漏,因为当我关闭一个“软”页面时,最新 Chrome 的堆快照表明我的对象仍在内存中。
我有很多情况,比如对象 A 订阅对象 B,对象 B 订阅对象 A,对象相互引用。这意味着,我认为,如果其中一个不能被垃圾回收,那么它们都不会被回收。
但是,我认为即使我的对象在“内部”相互引用,只要它们都无法访问,它们就会被垃圾收集器收集。我的对象没有被收集的原因是因为我有一些“外部”引用,比如 $(window).resize(function(){A.something()}) 或 window.A=A,我相信摆脱的关键内存泄漏就是找到那些“外部”引用。
我的问题是如何使用 Chrome 堆快照等工具快速找到那些“外部”参考?也就是说,如何找到key Retainer,比如A保留B,B保留A,C保留B,此时C就是key Retainer,去掉B和C的关系,就会使得A和B都收集垃圾。
顺便说一句:对于 Chrome 38 及更高版本的堆快照,Dominator View 是否仍然存在?
【问题讨论】:
标签: javascript memory-leaks google-chrome-devtools