该应用程序是一个页面,所以它没有刷新,我们希望让它在
Android设备上运行很长一段时间.
我们目前在大约18个小时后看到崩溃(以及一个logcat报告,指示在Android上运行时出现OOM错误).当我使用远程调试并使用chrome的开发工具捕获时间线时,很明显我们有内存泄漏,因为我们看到一个稳定增长的js堆.堆似乎继续增长,直到我强制垃圾收集.
另一件我认为特别的事情是,在时间轴上我还可以看到我们的事件监听器正在增长并且不受强制GC的影响.
这本身就是问题吗? (根据时间轴,我们正在谈论成千上万的听众)
除了标准的“3快照堆分析技术”之外,有没有人有任何建议?这在这里并不是很有用,因为即使它没有与之交互,堆也在增长,我认为这是由于我们在幕后进行的一些定期更新以读取和显示数据.否则我完全对任何其他内存分析工具开放!
我在该领域的经验很少,所以任何关于缩小这些令人讨厌的泄漏原因的建议都会非常棒!
不幸的是,由于程序的性质和大小,提供有用的代码片段非常困难.我为这个长期问题道歉.
编辑:
我最强烈的怀疑之一是,当我查看开发工具时间线并看到听众不断增加,并且永远不会收集垃圾……这最终会导致崩溃吗?
最佳答案 伴侣.我曾经制作了一个单页应用程序,并且还保留了一些永远在那里运行的东西,并且遇到了同样的问题.我有一个无限的’while(true)’循环做某事.即使我在循环结束时取消了变量和对象,javascript的GC也没有收集垃圾.
解?我从一个while(true)循环变为一个定时事件.每隔1秒使用javascripts超时方法做一些事情.
从中我了解到javascript不会在(真)方法上运行GC.你的代码中有类似的东西吗?
地毯