Chrome开发者工具性能分析器

9

在搜索Javascript应用程序中的一些内存泄漏时,我尝试使用Chrome DevTools Profiler。是否有一些详细的信息描述可能在其中找到的所有条目?

例如,在执行简单的“打开主页,打开另一个页面,返回主页”并查看快照比较后,我可以找到具有大量对象计数并引起我的兴趣的“(array)”行。当打开该节点时,我看到成千上万行,如下所示...

  • (script line ends)[] @89876
  • (transition array)[] @748323
  • (object properties)[] @77529
  • (map descriptors)[] @13823
  • (code relocation info)[] @722653
  • [] @748003
  • (object elements)[] @40917

我在哪里可以阅读相关内容?

1个回答

14

堆中有许多v8内部的事情是无法从javascript中访问的。

例如(script line ends)是一个数组,其中包含脚本的行结束偏移量。v8需要它来设置断点。

每次创建对象时,v8都会执行许多操作,并为它们分配内存。请参见Lars Bak关于v8的视频。http://www.youtube.com/watch?v=hWhMKalEicY

如果您对该主题感兴趣,则有许多有关v8内部的幻灯片和演示文稿。

查找泄漏的最简单方法是使用“记录堆分配”配置文件。它会向您显示带有分配的“实时”图表。

您需要启动记录,重复您的场景几次,如果代码存在泄漏,则会在图表上看到相同数量的蓝色垂直条。因此,您应该停止记录并在中间某处选择蓝条并查看它具有哪些对象。

第一个蓝条并不重要,因为它可能仅进行了一次分配。

最后一个也不重要,因为它可能有将在下一个场景重复时释放的分配。

因此,最佳候选人是中间的条形图。 http://www.youtube.com/watch?v=x9Jlu_h_Lyw

最有趣的项目是由您的脚本创建的对象。


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