Chrome中的内存泄漏以及快照大小和内存分配之间的差异

时间:2015-08-31 08:48:00

标签: memory-leaks google-chrome-devtools

我目前正在尝试在通过websockets接收一些更新的页面中找到内存泄漏。所以我做的是首先检查Chrome任务管理器,它显示分配给选项卡的内存正在增长。之后我用时间线工具(强制GC几次)检查,内存似乎表现得相当不错。 Timeline

有一些html节点被添加(绿线),所以我假设有一些节点仍然是从js代码引用的,但是当我到了profiler(Record Heap Allocation)时,我看到一个奇怪的行为 - 快照本身是109MB: Heap Allocation Snapshot

但是在我停止分析内存跳跃后,它不会接近109MB。我见过的例子:

  • 在快照361M之前,快照723M之后,快照 - 89M
  • 在快照329M之前,快照612M之后,快照 - 54.4M
  • 在快照450M之前,快照773M之后,快照 - 109M

我看到一些仍然被引用的节点,但它们的保留大小比快照的大小小很多。

所以我想知道的是为什么Chrome Profiler中存在如此奇怪的行为(快照大小和内存消耗的差异)以及如何找到消耗内存的内容?

1 个答案:

答案 0 :(得分:0)

该快照大小仅包括使用的JS堆大小。任务管理器将向您显示进程总大小,这不仅仅是JS堆。此外,一大块内存可能被类型化数据占用,这些数组的缓冲区分配在JS堆上。你可以切换"摘要"查看"统计"在堆快照中,看看js堆的崩溃是什么样的?