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

Is there any way to force the Javascript Garbage Collector in webkit based browsers?

本文关键字:Javascript 收集器 浏览器 webkit 有没有      更新时间:2023-09-26

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

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

谢谢。

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

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

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

访问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

我一直在尝试强制使用 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,我可以在强制下一轮使用更大的数组之前进行检查。

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