【问题标题】:Is there any way to force the Javascript Garbage Collector in webkit based browsers?有没有办法在基于 webkit 的浏览器中强制使用 Javascript 垃圾收集器?
【发布时间】:2012-04-30 22:17:40
【问题描述】:

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

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

谢谢。

【问题讨论】:

  • 您真正想解决什么问题?一旦您的 JS 线程完成其当前执行线程,垃圾收集就会自动发生。为什么你认为你需要显式运行垃圾回收?
  • 同上 jfriend00 所说的,并且您已将其标记为 [memory-leaks],您是否正在尝试查找内存泄漏?您需要解决的实际问题是什么?
  • 嗨,我的问题是我的 HTML5 游戏会产生大量垃圾,我想在受控情况下(如暂停菜单)调用 GC

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


【解决方案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,我可以在使用更大的数组强制下一轮之前进行真正的检查。

【讨论】:

  • 我很好奇你的支票实际上是为了/在看什么。我从来没有找到一种可靠的方法来查询内存使用情况(在我的情况下是 IE11)来知道这个 GC 什么时候“完成”
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    访问about:memory

    来自页面的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
    

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2015-02-07
        • 2017-11-16
        • 1970-01-01
        • 1970-01-01
        • 2016-07-30
        • 2012-11-14
        • 1970-01-01
        • 1970-01-01
        • 2011-05-14
        相关资源
        最近更新 更多