17

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

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

谢谢。

4

4 回答 4

21

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

  • Chrome:如果您从命令行/终端使用 启动它--js-flags="--expose-gc",那么它会提供window.gc().
  • 我认为 Firefox 需要单击about:memory.
  • 歌剧有window.opera.collect()
  • 边缘有window.CollectGarbage().
  • 野生动物园,未知。

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

于 2017-09-18T21:35:01.417 回答
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,我可以在使用更大的数组强制下一轮之前进行真正的检查。

于 2014-11-10T17:09:38.200 回答
1

我不确定这是否不是题外话,但有一个名为 FreeMemory ( https://addons.mozilla.org/en-US/firefox/addon/freememory/ ) 的 firefox 插件可以在没有运行垃圾或循环收集的情况下运行访问 about:memory 窗格,带有可配置的计时器。我相信那里有其他浏览器的替代品。

于 2014-11-26T01:37:38.260 回答
1

Visit about:memory.

From page's documentation on MDN:

about:memory is a special page within Firefox that lets you view, save, 
load, and diff detailed measurements of Firefox's memory usage. It also 
lets you do other memory-related operations like trigger GC and CC
于 2016-12-17T13:15:08.013 回答