【问题标题】:How to force Firefox (Version 6) to free memory?如何强制 Firefox(版本 6)释放内存?
【发布时间】:2011-08-23 09:48:42
【问题描述】:

我正在开发一个类似幻灯片的网络应用程序,其中当前图像被绘制到画布上,您可以使用下一个/上一个按钮翻阅图像。加载了someImage.src 的图像,出于性能原因,我在用户查看第一张图像时在后台执行此操作。 Firefox 在预加载期间分配了大量内存(比 Chrome 或 Safari 多 20-30 倍,甚至是 IE 的两倍)。此外,如果我更改幻灯片放映,我可以通过在后台加载幻灯片放映的 xml 描述(带有下拉菜单)而网站的 URL 保持不变,没有内存被释放,但分配了很多新的。直到我更改或重新加载网站的 URL,Firefox 才会解除内存。此行为与所有其他浏览器不同。

那里发生了什么?为什么 Firefox 如此饥渴?任何想法,如何解决? 有没有办法强制 Firefox 释放内存或减少用于预缓存加载(但未显示)图像的内存?

【问题讨论】:

  • 这不是一个建设性的评论,但我早就放弃了相信 Firefox 能够谨慎处理内存的能力。 Firefox 7 beta 应该已经改善了这种情况
  • 据我所知,JavaScript 的垃圾收集器永远不能直接调用,所以我认为你不走运。
  • @Gregory:可能没有建设性,但总是很高兴听到,你不是唯一的,不是吗?

标签: javascript firefox memory image-loading


【解决方案1】:

即使有时看起来 firefox 分配的内存越来越多,这也可能具有欺骗性。 Firefox 垃圾收集器的工作方式有些奇怪(对我来说)。在 Firefox 决定释放大量内存之前需要 2-8 分钟,这并不罕见。可能值得一看源代码。

但是,您可以通过nulling 一些变量/引用来加快处理速度,这样垃圾收集器就有机会更早地检测到应该放弃的内容。对于画布元素/参考,这尤其是一个好主意。因此,轻松设置不再使用/需要的变量

myCanvasRef = null;

应该为你做一些工作。如果您仍然认为 Firefox 使用了太多内存,请打开一个新选项卡并输入 about:memory。这将为您提供当前浏览器内存使用情况的详细视图。例如,您可以查看该内存是否用于 Javascript 代码、图像或其他对限制坏人非常有用的东西。

【讨论】:

  • delete 声明呢? (我想nullundefineddelete 都可以同等地工作,因为它们会减少对象的引用计数。)
  • 我会小心delete,尤其是在考虑其他浏览器时(当然,尤其是IE)。我认为 null 和 undefined 之间没有区别。
  • nullundefined 可互换使用以达到相同的目的,但 null 始终是对象,undefined 始终是基元。
【解决方案2】:

如果您来这里寻找“如何在 firefox 中强制 GC”,一种方法是导航到 about:memory,然后单击“gc”按钮。

不幸的是,这在我的特定情况下似乎没有多大帮助,但如果它对追随者有用的话,那就有它了。 link

【讨论】:

    猜你喜欢
    • 2015-10-25
    • 2016-12-24
    • 2012-08-13
    • 1970-01-01
    • 2019-06-06
    • 1970-01-01
    • 2015-05-03
    • 2015-11-06
    • 1970-01-01
    相关资源
    最近更新 更多