有没有办法在基于webkit的浏览器中强制使用Javascript垃圾收集器?

xus*_*xus 13 javascript firefox garbage-collection memory-leaks webkit

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

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

谢谢.

Zac*_*chB 15

(不只是将这个答案限制在基于WebKit的浏览器......)

  • Chrome:如果您从命令行/终端启动它--js-flags="--expose-gc",则提供window.gc().
  • Firefox我觉得需要单击"Free memory"按钮about:memory.
  • 歌剧有window.opera.collect().
  • 边缘有window.CollectGarbage().
  • Safari,未知.

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


小智 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));
  }
Run Code Online (Sandbox Code Playgroud)

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