【问题标题】:Chrome timeline tool unreliable?Chrome时间线工具不可靠?
【发布时间】:2013-08-05 15:29:17
【问题描述】:

所以我得到了这个我正在尝试调试的主干应用程序,

我让时间线记录,应用程序正在使用越来越多的内存,但如果我进入配置文件并拍摄堆快照,我总是得到相同的数字 (6mb),就像我的应用程序没有泄漏一样。

另外,当我拍摄快照时,时间线实际上恢复到 6mb。我不确定如何处理这种行为。

【问题讨论】:

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


    【解决方案1】:

    一切都很好,您的应用可能没有泄漏任何内存。您感到困惑的是garbage collector (GC)。

    GC 是一种“尝试回收垃圾或被程序不再使用的对象占用的内存”的机制。在时间线上看到内存不断增加是很正常的,这并不一定意味着应用程序正在泄漏内存。这意味着垃圾正在内存中累积,但您的浏览器(更准确地说是 JavaScript 引擎)知道它,并且在 Chrome 决定是时候删除它时将其删除(您可以阅读更多关于它的信息here)。尝试单击“收集垃圾”按钮 (),它会强制进行垃圾收集,您会发现时间线上会立即下降。

    回到制作快照的话题,以及为什么你总是以 6MB 结束。创建堆快照时发生的第一件事是......垃圾收集。这是因为 DevTools 不想用不再使用且应该删除的东西来掩盖快照。

    我强烈推荐阅读official docs about heap profiling

    【讨论】:

    • 非常感谢!我对垃圾收集器有点不高兴,它让内存积累了很多(对于 6 到 18mb 之间的移动应用程序来说很多)
    • @CedricDugas 您需要了解垃圾收集需要大量时间并暂停所有 JavaScript 执行。因此,Chrome 面临着一项艰巨的任务,即根据需要尽可能多地运行 GC,同时还要努力避免 GC 使应用程序无响应的情况(这就是为什么在不使用应用程序时调用 GC 的原因,例如,当您更改选项卡或缩小浏览器)。无论如何,您仍然可以通过不经常分配新内存(例如通过重用对象)来改进您的应用程序。这将减少内存使用增长,从而减少频繁的 GC 调用。
    猜你喜欢
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 2017-10-04
    • 2014-11-17
    • 2016-09-23
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    相关资源
    最近更新 更多