捕获单页应用程序的JavaScript内存泄漏

时间:2014-10-27 14:37:17

标签: javascript memory-leaks google-chrome-devtools

我使用knockout.js和其他地图,网格开源库创建了一个单页面应用程序。

我注意到我有内存泄漏,因为当我关闭一个“软”页面时,最新Chrome的堆快照表明我的对象仍在内存中。

我有许多情况,如对象A订阅对象B,对象B订阅对象A,对象相互引用。这意味着,我认为,如果其中一个不能被垃圾收集,那么它们都不会被收集。

但是,我认为即使我的对象“内部”相互引用,只要它们都无法访问,它们将被垃圾收集器收集。我的对象没有被收集的原因是因为我有一些“外部”引用,如$(window).resize(function(){A.something()})或window.A = A,我相信摆脱的关键内存泄漏是为了找到那些“外部”引用。

我的问题是如何使用Chrome Heap Snapshot等工具快速找到这些“外部”参考?换句话说,如何找到关键的Retainer,例如,A保留B,B保留A,C保留B,在这种情况下,C是关键的Retainer,摆脱B和C之间的关系会使A和B都生成收集垃圾。

BTW:Chrome 38及更高版本中的堆快照是否仍存在Dominator View?

1 个答案:

答案 0 :(得分:0)

您的答案是Tool to track down JavaScript memory leak

您也可以阅读文档here