Chrome开发者工具第一个内存堆快照大小神秘巨大。

5
我正在使用Chrome开发者工具中的"Profiles"选项卡记录内存堆快照。我的应用程序存在内存泄漏,因此我期望快照的大小逐渐增加,而它们确实是这样的。但由于我不理解的原因,第一个快照总是人为地很大...在第一次和第二次之间创建了似乎具有欺骗性的内存下降。所有随后的快照都像预期的那样逐渐增加。
我知道在页面加载开始时通常会使用额外的内存,由于缓存和其他设置。但无论何时我拍摄第一个快照,情况都是相同的。它可能是页面加载后30秒或30分钟。同样的模式。我唯一的猜测是,分析工具本身以某种方式与内存交互,但这似乎有点牵强。
这里有什么想法吗?

enter image description here

1个回答

3

在 Chrome 进行内存快照之前,会尝试回收垃圾。但它并不完全回收,只进行预定义的几次遍历(这个神奇的数字 似乎是 7)。因此,在第一次快照被拍摄时,可能仍有未被回收的垃圾。

在进行第一次快照之前,请尝试转到“时间轴”选项卡并手动强制进行垃圾回收。

Forcing garbage collection in Chrome DevTools

根据我的测试,这总是会减小第一个快照的大小。

Memory snapshots


哇,我之前没找到那个手动GC按钮。它是否也会进行任意7次的遍历?我应该多按几次以确保吗? - emersonthis
从我所见,这个按钮也不能彻底清理,所以你肯定可以多次点击它。 - Konrad Dzwinel
2
@emersonthis 你可以通过在页面加载后立即开始时间线记录,然后点击“收集垃圾”按钮多次,停止记录并查找“Major GC”事件来测试是否已经清除了所有垃圾。最后一个事件应该显示“0 B collected”,这意味着没有更多的垃圾需要清理 - http://imgur.com/ScAJWHk。 - Konrad Dzwinel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接