Chrome 中的 Javascript 垃圾收集器无法自动启动

Javascript Garbage Collector in Chrome not kicking in automatically

提问人:manjuv 提问时间:12/15/2022 最后编辑:sideshowbarkermanjuv 更新时间:12/15/2022 访问量:416

问:

在页面加载时,浏览器消耗的内存迅速增加,浏览器 崩溃并显示“Aw, Snap!”消息,错误代码为“Out of Memory”。

我观察到:

  • 如果我使选项卡处于非活动状态,则 GC 将启动并收集无法访问的对象并回收内存。
  • 当我从浏览器的 DevTools 触发手动垃圾回收时,也会回收内存。

这表明没有内存泄漏,并且内存正在增加 只是因为 GC 没有自动启动以回收内存。

注意:这仅发生在基于 chromium 的浏览器 [Chrome 和 Edge] 中。 该页面在Firefox中正常加载,因为内存会定期回收。

在这种情况下该怎么办?有什么方法可以从javascript触发GC吗?

观察 -> 在 chrome 任务管理器中,内存占用量迅速增加,而 Javascript 内存保持在限制范围内

Screenshot of chrome task manager

javascript 垃圾收集 google-chrome-devtools chromium

评论

0赞 Dean Van Greunen 12/15/2022
在堆栈中发出我的 be,检查是否有过多的函数调用,也许是任何递归的函数调用
0赞 Bergi 12/15/2022
"在页面加载时,浏览器消耗的内存会迅速增加“——你的代码在做什么?
0赞 Bergi 12/15/2022
"有什么方法可以从 javascript 触发 GC 吗?- 不,没有。
0赞 manjuv 12/15/2022
@DeanVanGreunen 我的代码中有递归函数。但是当我手动触发 GC 时,内存会被回收。这是否意味着问题出在堆内存而不是堆栈上?
0赞 manjuv 12/15/2022
@Bergi我正在尝试创建大量对象(主要是 DOM 节点)。我忘了提到整个进程内存以 GB 为单位增加,但 javascript 堆不会以如此快的速度增加。

答: 暂无答案