有什么方法可以在基于 webkit 的浏览器中强制使用 Javascript 垃圾收集器吗?

问题描述 投票:0回答:4

在 Internet Explorer 中,我们可以使用以下方法强制执行 Javascript 垃圾回收:CollectGarbage();

该方法在 Firefox 上未定义。你知道是否有某种等价物吗?

谢谢。

javascript firefox memory-leaks webkit garbage-collection
4个回答
26
投票

(不仅仅将此答案限制于基于 WebKit 的浏览器......)

  • Chrome:如果您使用
    --js-flags="--expose-gc"
    从命令行/终端启动它,那么它会提供
    window.gc()
  • Firefox 我认为需要单击
    about:memory
    中的“释放内存”按钮。
  • 歌剧有
    window.opera.collect()
  • Edge 有
    window.CollectGarbage()
  • Safari,未知。

请注意,您不应手动运行 GC。我发布这个只是因为它对开发测试有用。


3
投票

访问

about:memory

来自 MDN 页面的文档

about:memory 是 Firefox 中的一个特殊页面,可让您查看、保存、 加载并比较 Firefox 内存使用情况的详细测量结果。它也是 让您可以执行其他与内存相关的操作,例如触发 GC 和 CC


1
投票

我一直在尝试强制GC,似乎无论实际的浏览器如何,相对较好的方法是运行以下代码:

  function gc(max) {
    var arr = [];
    for (var i = 0; i < max; i++) {
      arr.push(i);
    }
    return arr.length;
  }
  for (var i = 0; ; i++) {
    // repeat until you have enough:
    gc(Math.pow(2, i));
  }

当然,一个问题是知道何时停止调用 gc(...):因为需要某种外部方法来检测 GC 是否成功结束。就我而言,我使用的是嵌入式 WebView,我可以在强制下一轮使用更大的数组之前进行检查。


1
投票

我不确定这是否不是题外话,但 firefox 有一个名为 FreeMemory 的插件(https://addons.mozilla.org/en-US/firefox/addon/freememory/)来运行垃圾或无需访问 about:内存窗格即可循环收集,并具有可配置的计时器。我相信其他浏览器还有其他选择。

© www.soinside.com 2019 - 2024. All rights reserved.