使用页面重新加载诊断内存泄漏

问题描述:

我怀疑我的单页JavaScript应用程序在某处包含内存泄漏。运行Firefox或Chrome的弱设备最终会在页面打开的情况下崩溃。我试图确定重新加载页面是否能够释放内存。使用页面重新加载诊断内存泄漏

我知道内存处理是特定于浏览器的,因此Chrome或Firefox中的答案可能会有所不同。

注意:我认识到浏览器在这个问题中被提及了很多(这可能不是主题),但这个问题的关键是关于javascript调试,我认为这是非常关注的话题。

+0

你可以显示任何代码,你怀疑它可能被包含? – depperm

+0

这有帮助吗? http://*.com/questions/19621074/finding-javascript-memory-leaks-with-chrome(否则,刷新预计会清除内存使用情况,通常关注内存泄露“单页面应用程序“) – mczepiel

+0

@mczepiel谢谢你的帮助,但似乎没有解决关于页面重新加载的具体问题。但是你的括号里有......你能否在答案中详细说明这一点? – emersonthis

禁止浏览器/扩展程序错误,浏览器在不再需要时释放资源; Firefox清除compartments,Chrome杀死processes和关联的存储。

Firefox没有它的最好的,但可能需要一些时间来清除内存,有时可能会创建zombie compartments:当他们是垃圾回收

室被破坏。这发生在最后一次引用它们消失后的一段时间。这意味着在页面被关闭和其隔间消失之间可能存在延迟...

有时,由于Firefox中的错误,附加组件SDK和/或加载项会创建出不会被销毁的隔离专区。这些都是一种特殊的内存泄漏,并且它们会导致Firefox的内存使用量随着时间的推移逐渐增加,从而减慢速度并使其更容易崩溃。

Chrome对每个选项卡使用了一个进程(对于标签中的某些实体以及IIRC,例如插件,iframe等,实际上是子进程),从而达到相同的效果。虽然对chrome://memory-redirect/进行了快速检查,刷新标签看起来像使用相同的pid。所以刷新不是一个完全干净的石板。

FWIW Chrome提供了一种“强制刷新”,用于清除缓存和可能是清除更多的内存或安慰剂或者有用:cmd-shift-r

我不是很熟悉,但内部我只看过的东西在particular browser变得太聪明时尝试保留东西,以免在更改起源等时努力提高负载性能,在刷新之间不能可靠地释放。

简而言之,如果你没有看到内存已经释放,但是你想用各种“about:memory”工具来验证,那么你可能会绊倒浏览器的bug。请到avoid such behavior and/or report the issue to the browser's dev team。否则,我认为你最好通过使用各种可用的工具解决你自己的页面内存泄漏问题。

调试JS的资源使用情况的一个好方法是使用检测工具中的Firefox性能监视器。 Firefox Dev Edition has more in-depth tools

在页面上按F12键,然后点击检查窗口中的小速度计图标;这将打开性能监视器。按下“开始录制”按钮,Firefox将开始对页面上的所有脚本时间,CSS活动,用户输入等进行基准测试。

如果您觉得它已经运行足够长时间,请停止录制,然后您将看到所有数据。顶部是显示性能的图表,您可以单击任何部分并检查当时运行的所有脚本。

A full tutorial for the performance tools can be found here