【问题标题】:Can I get the GC'd memory from dev tools?我可以从开发工具中获取 GC 的内存吗?
【发布时间】:2015-02-21 16:19:38
【问题描述】:

我有一个正在调试的大型应用程序。我注意到一个锯齿状的内存模式,表明正在进行频繁的 GC。

为了调试它,我试图找到正在被 GC 处理的内存的内容。这可以在带有开发工具的 chrome 中实现吗?我知道我可以拍摄堆快照,但我如何保证这会在 GC 之前和之后立即发生?我知道我可以从代码中触发堆快照,但同样的问题。

【问题讨论】:

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


    【解决方案1】:

    DevTools 中尚不提供对垃圾收集的深入了解。不过,我前段时间有requested this feature。您可以“加星标”表示您也想拥有它。


    至于快照,您将无法将它们用于您的目的。在制作每个快照之前,都会收集所有垃圾。

    快照中是否包含“死”(无法访问)对象?

    没有。快照中仅包含可访问的对象。此外,拍摄快照总是从进行 GC 开始。

    source


    您最好的方法是记录堆分配(“配置文件”>“记录堆分配”)并使用内存快照来了解应用程序正在创建哪些对象。有了这些知识,您可以尝试识别寿命短的物体(导致锯齿图案)。

    顺便说一句,如果你使用requestAnimationFrame,你应该知道它本身就是causing saw tooth pattern

    【讨论】:

      【解决方案2】:

      使用记录堆分配配置文件类型,您可以获得有关已分配对象的信息。

      您需要在 DevTools 设置中启用“记录堆分配堆栈跟踪”选项。 见截图。

      之后,您需要记录“记录堆分配”快照类型。 记录过程可能会显着减慢页面速度,因为 DevTools 每次页面分配对象时都会扫描 js 堆栈。结果,您将获得包含有关分配信息的快照。在许多情况下,DevTools 可以检测对象的类名。见截图。

      在快照中您需要选择分配视图。

      我认为网格中的信息可以帮助您解决问题。 在屏幕截图中,您可以看到一个类有 41k 分配,但其中只有 12k 仍然存在。所以 29k 个对象是垃圾。即使您没有看到对象的名称,您也可以跳转到分配对象的源。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-03
        • 2013-12-11
        • 2019-07-01
        • 2014-07-22
        • 2013-03-22
        • 1970-01-01
        相关资源
        最近更新 更多