我使用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?