Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
捕获单页应用程序的JavaScript内存泄漏_Javascript_Memory Leaks_Google Chrome Devtools - Fatal编程技术网

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

捕获单页应用程序的JavaScript内存泄漏,javascript,memory-leaks,google-chrome-devtools,Javascript,Memory Leaks,Google Chrome Devtools,我使用knockout.js和其他map、grid开源库创建了一个单页应用程序 我注意到我有内存泄漏,因为当我关闭一个“软”页面时,最新Chrome的堆快照表明我的对象仍在内存中 我有很多情况,比如对象A订阅对象B,对象B订阅对象A,对象相互引用。这意味着,我认为,如果其中一个不能被垃圾收集,那么就不会被收集 然而,我认为即使我的对象在“内部”相互引用,只要它们都不可访问,它们就会被垃圾收集器收集。我的对象未被收集的原因是因为我有一些“外部”引用,如$(window).resize(functi

我使用knockout.js和其他map、grid开源库创建了一个单页应用程序

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

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

然而,我认为即使我的对象在“内部”相互引用,只要它们都不可访问,它们就会被垃圾收集器收集。我的对象未被收集的原因是因为我有一些“外部”引用,如$(window).resize(function(){A.something()})或window.A=A,我认为消除内存泄漏的关键是找到那些“外部”引用

我的问题是如何使用Chrome Heap Snapshot等工具快速查找这些“外部”引用?换言之,如何找到密钥保持器,例如,A保留B,B保留A,C保留B,在这种情况下,C是密钥保持器,去掉B和C之间的关系将使A和B都被垃圾收集


顺便说一句:Chrome38及更高版本的堆快照是否仍然存在支配视图?

这是您问题的答案

您还可以阅读文档