【问题标题】:Chrome DevTools Memory InconsistencyChrome DevTools 内存不一致
【发布时间】:2021-06-07 11:14:51
【问题描述】:

我正在使用 JavaScript 构建一个以 60 FPS 运行的游戏,并注意到发生了大量垃圾收集(每 1.5 秒 7.2 MB,请参阅下面的 Chrome DevTools),这对帧速率有显着影响。

我使用分配时间线查看每帧添加到内存中的内容。正如您在下面看到的,每帧分配了 4.1 kB。所以我希望看到每 1.5 秒收集 369 kB 的垃圾。

为什么两者之间存在数量级差异?我一直在使用分配时间线来减少使用的内存(最初是每帧 18 kB)。但是,在查看“性能”标签时,这几乎是零影响。

由于分配时间线似乎不正确,有什么方法可以知道正在收集什么垃圾?

附加信息

  • 这是游戏中两个时刻的堆快照比较。这似乎也不一致,它包含了很多我不希望每一帧都改变的东西。

  • 我尝试在我的游戏中删除对象的数量(在一个数组中)这确实在“性能”标签中产生了很大的影响。但我真的很想在 DevTools 的某个地方看到这个数组,这样我就可以优化它了。

  • 我尝试在屏幕上禁用渲染,但这没有影响。所以GC来自游戏代码。

  • 在 Safari 中测量显示的结果与 Chrome 的性能选项卡相似。

【问题讨论】:

  • 你使用requestAnimationFrame吗?
  • 是的,事实上,如果您想查看源代码,我正在使用 Replay 引擎:github.com/edbentley/replay

标签: javascript memory google-chrome-devtools


【解决方案1】:

我想我找到了解决这个问题的方法:我删除了引擎中的循环,并在按下键时运行每个帧。

这样我可以拍摄一个堆快照,只进行一帧,然后快速拍摄另一个快照(在 GC 开始之前)。 “快照之间分配的对象”视图似乎更加一致,并且显示了 JS 引擎的内部数据(如函数范围)占用的大量内存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-24
    • 2017-04-15
    • 1970-01-01
    • 2015-05-28
    • 2017-06-25
    • 2020-01-21
    • 2017-11-19
    • 2020-03-04
    相关资源
    最近更新 更多