【问题标题】:Find out which part of the code causes the most of garbage collection in JS找出代码的哪一部分导致 JS 中的垃圾收集最多
【发布时间】:2013-10-05 05:08:18
【问题描述】:

我有一个复杂的前端 Web 应用程序,我正在尝试通过大量数据流来优化它。现在我看到大约 40% 的时间花在使用 chrome profiler 进行垃圾收集上。有什么方法可以查看代码的哪一部分导致了占用垃圾收集时间最多的分配?

请注意,此问题并非特定于谷歌浏览器。我不介意使用其他工具来找出答案。

【问题讨论】:

    标签: javascript google-chrome garbage-collection google-chrome-devtools chromium


    【解决方案1】:

    您的代码很可能会实例化许多短期对象(DOM 节点?)。在 GC 中花费的时间通常不取决于被收集的对象的类型,主要取决于这些对象的数量。

    因此,您可以尝试获取并比较两个堆快照,以查看在新分配列表中占主导地位的对象类型。更多详细信息可以在https://developers.google.com/chrome-developer-tools/docs/heap-profiling#views_comparison 找到(唯一的区别是您应该在 [强制] GC 完成后拍摄第一个快照,而在分配大量堆时拍摄第二个快照。)

    【讨论】:

    • 有一些短暂的对象,例如参数对象,并且所有的数组映射都会创建新的对象。拍摄堆快照会导致垃圾收集,这不会让我看到任何那些短暂的。所以我真的不认为我可以用它作为衡量标准。
    猜你喜欢
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    相关资源
    最近更新 更多