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

时间:2012-04-19 11:50:56

标签: javascript firefox memory-leaks webkit garbage-collection

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

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

感谢。

4 个答案:

答案 0 :(得分:11)

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

  • Chrome:如果您使用--js-flags="--expose-gc"从命令行/终端启动它,则会提供window.gc()
  • Firefox我认为需要点击" Free memory" about:memory中的按钮。
  • Opera有window.opera.collect()
  • Edge有window.CollectGarbage()
  • Safari,未知。

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

答案 1 :(得分: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,我可以在强制下一轮使用更大的阵列之前进行检查。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

访问<android xmlns:android="http://schemas.android.com/apk/res/android"> <application android:theme="@style/awesome"/> </android>

来自页面documentation on MDN

about:memory