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


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

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

谢谢。


12285
2018-04-19 11:50


起源

你真的想解决什么问题?一旦您的JS线程完成其当前执行线程,垃圾收集就会自动发生。为什么你认为你需要明确地运行垃圾收集? - jfriend00
与jfriend00所说的相同,并且你将其标记为[内存泄漏],你是否试图找到内存泄漏?您需要解决的实际问题是什么? - Keldon Alleyne
嗨,我的问题是我有一个HTML5游戏产生大量垃圾,我想在受控情况下调用GC(如暂停菜单) - xus


答案:


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

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

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


9
2017-09-18 21:35





我一直试图强制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
2017-11-10 17:09





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


1
2017-11-26 01:37





访问 about:memory

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

1
2017-12-17 13:15