使用分配分析器

优质
小牛编辑
139浏览
2023-12-01

使用分配分析器工具来查找未被正确地垃圾收回收,并继续保留在内存中的对象。

分配分析器如何工作

allocation profiler(分配分析器)结合了堆分析器中快照的详细信息以及Timeline(时间轴)面板的增量更新以及追踪信息。与这些工具相似,追踪对象堆的分配过程包括开始记录,执行一系列操作,以及停止记录并分析。

分配分析器在记录中周期性生成快照(频率为每50毫秒),并且在记录最后停止时也会生成一份快照。

注意: `@`之后的数字是在多个生成快照之间的持续对象ID。这允许堆状态之间的精确比较。显示对象的地址没有意义,因为对象在垃圾回收期间被移动。

启用分配分析器

要开始使用分配分析器:

  • 确认你安装了最新的 Chrome Canary。
  • 打开 DevTools 的 Profiles(配置)面板。
  • 现在,在Profiles(配置)面板中,你可以看见一项名为 Record Allocations Timeline(录制分配时间轴) 的配置。
注意: 这部分文档比较老,截图和描述可能和最新的DevTools有出入

读取一个堆分配分析

堆分配分析器(heap allocation profile)显示正在创建对象的位置,并标识保留路径。 在下面的快照中,顶栏的条形图表示对象什么时候在堆中被找到。

每个条形的高度对应最近分配的对象的大小,而其颜色颜色表示这些对象是否仍然存在于最终堆快照中。蓝色表示在时间轴的最后该对象依旧存在,灰色则说明对象在时间轴内被分配,但是已经被垃圾回收器回收了:

在下面的例子中,一个操作被执行了10次。这个简单的程序加载了五个对象,所以显示了五个蓝色的条形图案。但是最左边的条形图表明了一个潜在的问题。

接下来你可以使用时间轴中的滑动条来放大这一特定的快照,然后查看最近被分配到这一点上的对象。

4.png

点击堆中的某个特定对象会在堆快照的顶部显示其保留树。检查对象的保留路径会让你明白为什么对象没有被回收,并且你可以在代码中做出更改移除不必要引用。

按函数查看内存分配

您还可以通过JavaScript函数查看内存分配。 有关详细信息,请参阅按函数调查内存分配。