【问题标题】:Task manager shows memory leak, but Heap snapshot doesn't任务管理器显示内存泄漏,但堆快照没有
【发布时间】:2013-01-06 04:31:19
【问题描述】:

我每 5 秒运行一次繁重的 JavaScript,任务管理器显示内存使用量不断增加。但是堆快照没有。如果我停止脚本,大约 半分钟 两分钟后会清除内存。

更新:

如果我长时间离开脚本,内存会增加,直到浏览器崩溃。 我还尝试运行 chrome 开发工具的时间线测试,它们也没有显示内存使用量的增加,与堆快照相同。所以我猜这是某种泄漏,但我不明白是什么泄漏。

由于无法安装以前的 Chrome 版本,我无法确认的另一件事是,我不记得以前(

【问题讨论】:

  • 如果您让它运行足够长的时间,您会看到锯齿状图案吗?如果是这样,你只需要等到 GC 完成它的工作。
  • 如果它永远不会退缩,这只是一个“内存泄漏”:x
  • 我遇到了同样的问题:在 Chrome 任务管理器中,我看到我的页面内存在几分钟内从 100MB 增加到了 1200MB 以上。同时,JavaScript 内存保持在 13MB 左右。时间轴显示 JS 堆的锯齿形状很好,所以不知道为什么内存一直在增长,

标签: javascript memory-leaks


【解决方案1】:

假设您指的是 Chrome 开发人员工具,您可能看不到堆快照中的内存增加,因为堆快照分析器在快照之前运行垃圾收集器。

内存使用量增加是很正常的,尤其是在主动处理期间。垃圾收集器不会不必要地运行。如果你的机器有空闲内存,它会让保留的内存增长。如果您开始推动可用内存的限制,则收集器应该运行。您应该允许这种情况发生,看看是否会发生。

由于您报告内存在一段空闲期后下降到原来的水平,这表明没有内存泄漏,垃圾收集器能够正确收集所有分配的堆对象。

但是,IANAGE(我不是 Google 工程师)。我建议阅读Heap Profiler documentation 和相关的Memory 101 page 作为背景。

【讨论】:

  • 我做了更多测试并更新了问题,我仍然认为这是一个泄漏。
猜你喜欢
  • 2017-12-04
  • 1970-01-01
  • 2016-01-10
  • 1970-01-01
  • 2022-01-17
  • 2021-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多