在Chrome devtools profiler中,递归保留树的含义是什么

时间:2013-11-18 16:31:26

标签: javascript memory-leaks google-chrome-devtools

例如,以下内容 devtools showing problem

注意:毕竟树的afterSubMenuRender部分扩展到 bound_this函数native_bind()@ 686283

有问题的代码在

之下
ContextMenuItem = function(mConfiguration)
{
        ...
    this.afterSubMenuRender = this.afterSubMenuRender.bind(this);

如果我用

替换它没有任何区别
this.afterSubMenuRender = this._afterSubMenuRender.bind(this);

该方法是从knockout引用的,但是我在应用程序周围看到了大量对象,包括那些从knockout引用的或刚刚绑定到jquery事件或自定义事件的对象。在所有情况下,这些都被处置。我也发现并修复了大量内存泄漏,但下面的内容似乎没有消失。

我可以忽略它(因为它是一个独立的树吗?)或者它是否有一个看不见的保留树,我在devtools中看不到或者我还能做其他分析吗?

1 个答案:

答案 0 :(得分:1)

您使用的是什么版本的Chrome?

寻找内存泄漏的最佳方法是使用Record Heap Allocations配置文件类型。 它不断扫描堆中的新对象,并将它们显示为蓝色条。 如果你重复一个场景次数,那么每次迭代都会留下一个蓝色条 很有可能存在泄漏。您应该停止录制并在概览窗口中选择一个栏。执行此操作时,探查器将过滤掉当时未分配的所有对象。因此,您唯一需要了解的是对象保留这些泄漏的对象。在大多数情况下,至少有一条从根到物体的路径使它们保持活力。

如上所述here甚至DevTools控制台也可以是一个保留器。 在您的情况下,我建议在DevTools设置面板中启用“显示高级堆快照属性”复选框。