C++ 假人的高内存使用率

C++ 假人的高内存使用率,c++,firefox,memory-management,memory-leaks,C++,Firefox,Memory Management,Memory Leaks,我刚刚重新启动了我的firefox浏览器,因为它开始结巴和减速。由于(我的理解)内存使用过多,每隔一天就会发生这种情况。 我注意到,当它开始时需要40米,然后,当我注意到减速时,它会变慢 1G,除非关闭其他应用程序,否则我的机器将无法提供更多功能。 我试图理解为什么解决这个问题如此困难的背后的技术原因 ve Mozilla有一个关于高内存使用率的页面: 但我想找一个更深入、更令人满意的解释。不是超技术的,但足以给这个问题更多的尊重和取悦这里的人群 我已经在思考的一些问题(它们可能很傻,所以放轻

我刚刚重新启动了我的firefox浏览器,因为它开始结巴和减速。由于(我的理解)内存使用过多,每隔一天就会发生这种情况。 我注意到,当它开始时需要40米,然后,当我注意到减速时,它会变慢 1G,除非关闭其他应用程序,否则我的机器将无法提供更多功能。 我试图理解为什么解决这个问题如此困难的背后的技术原因 ve

Mozilla有一个关于高内存使用率的页面:

但我想找一个更深入、更令人满意的解释。不是超技术的,但足以给这个问题更多的尊重和取悦这里的人群

我已经在思考的一些问题(它们可能很傻,所以放轻松):

  • 当我关闭所有选项卡时,为什么内存使用率没有一路下降
  • 为什么扩展/主题/插件内存使用没有限制
  • 如果长时间保持打开状态,为什么内存使用会增加
  • 为什么内存泄漏很难找到和修复

应用程序和语言不可知论的答案也很受欢迎。

浏览器就像人一样——他们变老,变得臃肿,被年轻和瘦削的模特抛弃

Firefox不仅仅是一个浏览器,它还是一个生态系统。 虽然我觉得最近的版本相当臃肿,但核心产品总体上是稳定的

然而,firefox是一个生态系统/平台,用于:

1) 写得不好的插件

2) 写得很糟糕的JavaScript代码,在其中执行

3) Adobe flash作为重量级视频和写得不好的广告脚本的平台,如“用鸭子击打奥萨马·本·拉登以降低抵押贷款利率并获得免费iPod*(需要参与)

4) Quicktime和其他媒体播放器

5) 一些嵌入式Java代码

内存泄漏的描述表明脚本正在运行,或者第三方工具正在请求更多内存。如果你曾经在Mac电脑上运行过Flash,这几乎是一个给定值,CPU利用率为90%

大多数编程语言的目标不是拯救你,而是给你工具来拯救你自己。您可以用任何语言编写带有内存泄漏的糟糕和臃肿的代码,包括使用垃圾收集的代码。第三方工具通常不如平台本身测试得好。试图做太多事情的网页也很常见

如果你想做一个实验来证明这一点,那就买一台带有Firefox的mac电脑,去一个写得很好的网站,比如Stack Overflow,花一个小时。你的内存使用量不应该增长太多。然后花5分钟访问Myspace上的随机页面

现在让我试着根据我的猜测回答你们的问题,因为我不熟悉源代码

  • 当我关闭所有选项卡时,为什么 内存的使用不是一直在减少吗 往下走
每个浏览器实例都是一个独立的进程,具有自己的内存,而单个窗口中的选项卡都位于同一进程中。Firefox过去有一些内存缓存,仅仅关闭一个选项卡并不能立即从内存缓存中清除相关信息。如果重新打开同一站点的选项卡,可能会获得更好的性能。有一些高级选项允许您禁用它,比如browser.cache.memory.enable。或者只搜索禁用内存缓存

* Why is there no limits on extensions/themes/plugins memory usage?
出于同样的原因,Windows或Linux对可以在其上运行的应用程序没有审查程序。这是一个开放的环境,你承担风险。如果您想要一个应用程序和扩展都经过“验证”的环境,苹果可能是一个不错的选择:)

并非脚本中的所有计算和操作都具有视觉表现形式。一个脚本可以在后台做一些事情(比如请求额外的材料,预取的东西,只是bug),即使你没有看到它

* Why are memory leaks so difficult to find and fix?
是关于簿记的。想想你一生中借过的每一件东西(甚至一支笔),或者有人借过你的东西。他们都算上了吗?内存泄漏的方式是相同的(从系统借用内存),只是传递项目。然后看看你桌上的东西,你有没有因为“你可能很快就会需要它”而留下什么东西,即使你可能不会?同样的故事

  • 为什么内存泄漏很难找到和修复

因为一些开发人员拒绝使用诸如Electric Fence之类的工具。

内存泄漏首先是因为您希望将内容保存在内存中而不是磁盘上。例如,假设您有一个网页,其中包含图像、CSS、JavaSript和文本。如果每次要使用JavaScript解释器或CSS解析器或字体呈现引擎来显示文本时,您都会转到硬盘,那么浏览器将非常慢,有时根本无法工作(例如,因为一个JavaScript片段可能需要另一个JavaScript片段留下的变量)。因此,浏览器试图将其工作所需的所有内容保留在内存中,这些内容很容易被交叉引用(JavaScript调用到Adobe Flash,Adobe Flash调用到JavaScript等等)。而且您必须非常小心处理此类资源引用,因为过早地清除它们并使其无序会破坏代码(最好保留一个资源,然后因为它不存在而突然消亡)


另请参阅一些血淋淋的细节。

这个问题有点过于宽泛。Firefox存在内存泄漏问题,最好你仔细阅读这个主题。关闭选项卡不一定会释放分配给该选项卡的内存。而你的编程问题是?@KevinDTimm这是列表中的最后一个项目。我没有读一篇文章关于浏览器问题的轮胎论文,找到一个(隐藏的)关于内存泄漏的查询:)Firefox开发者使用Valgrind,这比电子围栏功能强得多。对他们有好处。我有
* Why are memory leaks so difficult to find and fix?