使用分配分析器
优质
小牛编辑
139浏览
2023-12-01
使用分配分析器工具来查找未被正确地垃圾收回收,并继续保留在内存中的对象。
分配分析器如何工作
allocation profiler
(分配分析器)结合了堆分析器中快照的详细信息以及Timeline
(时间轴)面板的增量更新以及追踪信息。与这些工具相似,追踪对象堆的分配过程包括开始记录,执行一系列操作,以及停止记录并分析。
分配分析器在记录中周期性生成快照(频率为每50毫秒),并且在记录最后停止时也会生成一份快照。
注意: `@`之后的数字是在多个生成快照之间的持续对象ID。这允许堆状态之间的精确比较。显示对象的地址没有意义,因为对象在垃圾回收期间被移动。启用分配分析器
要开始使用分配分析器:
- 确认你安装了最新的 Chrome Canary。
- 打开 DevTools 的
Profiles
(配置)面板。 - 现在,在
Profiles
(配置)面板中,你可以看见一项名为Record Allocations Timeline
(录制分配时间轴) 的配置。
读取一个堆分配分析
堆分配分析器(heap allocation profile)显示正在创建对象的位置,并标识保留路径。 在下面的快照中,顶栏的条形图表示对象什么时候在堆中被找到。
每个条形的高度对应最近分配的对象的大小,而其颜色颜色表示这些对象是否仍然存在于最终堆快照中。蓝色表示在时间轴的最后该对象依旧存在,灰色则说明对象在时间轴内被分配,但是已经被垃圾回收器回收了:
在下面的例子中,一个操作被执行了10次。这个简单的程序加载了五个对象,所以显示了五个蓝色的条形图案。但是最左边的条形图表明了一个潜在的问题。
接下来你可以使用时间轴中的滑动条来放大这一特定的快照,然后查看最近被分配到这一点上的对象。
点击堆中的某个特定对象会在堆快照的顶部显示其保留树。检查对象的保留路径会让你明白为什么对象没有被回收,并且你可以在代码中做出更改移除不必要引用。
按函数查看内存分配
您还可以通过JavaScript函数查看内存分配。 有关详细信息,请参阅按函数调查内存分配。