我目前正在尝试在通过websockets接收一些更新的页面中找到内存泄漏。所以我做的是首先检查Chrome任务管理器,它显示分配给选项卡的内存正在增长。之后我用时间线工具(强制GC几次)检查,内存似乎表现得相当不错。
有一些html节点被添加(绿线),所以我假设有一些节点仍然是从js代码引用的,但是当我到了profiler(Record Heap Allocation)时,我看到一个奇怪的行为 - 快照本身是109MB:
但是在我停止分析内存跳跃后,它不会接近109MB。我见过的例子:
我看到一些仍然被引用的节点,但它们的保留大小比快照的大小小很多。
所以我想知道的是为什么Chrome Profiler中存在如此奇怪的行为(快照大小和内存消耗的差异)以及如何找到消耗内存的内容?
答案 0 :(得分:0)
该快照大小仅包括使用的JS堆大小。任务管理器将向您显示进程总大小,这不仅仅是JS堆。此外,一大块内存可能被类型化数据占用,这些数组的缓冲区分配在JS堆上。你可以切换"摘要"查看"统计"在堆快照中,看看js堆的崩溃是什么样的?