所以我得到了这个我正在尝试调试的骨干应用程序,
我让时间线记录,应用程序正在使用越来越多的内存,但如果我进入配置文件,并采取堆快照,我总是得到相同的数字(6mb),就像我的应用程序没有泄漏。
另外,当我拍摄快照时,时间线实际上会回到6mb。我不知道该怎么做这个行为。
答案 0 :(得分:4)
一切都很好,你的应用程序可能没有泄漏任何记忆。您感到困惑的是garbage collector(GC)。
GC是一种“尝试回收垃圾或由程序不再使用的对象占用的内存”的机制。看到内存在时间轴上上升是很正常的,并不一定意味着应用程序正在泄漏内存。这意味着垃圾正在内存中累积,但是你的浏览器(更准确地说 - JavaScript引擎)知道它并且会在Chrome决定它的时候删除它(你可以阅读更多关于它here)。尝试点击“收集垃圾”按钮(),它会强制进行垃圾收集,你会发现时间线上会立即掉线。
回到拍摄快照以及你总是以6MB结束的原因。创建堆快照时发生的第一件事是...垃圾回收。这是因为DevTools不想用不再使用的东西掩盖快照,应该将其删除。
我强烈建议您阅读official docs about heap profiling。