一个小改变,让Firefox崩溃次数降低70%
出品 | OSC开源社区(ID:oschina2013)
用户在 Windows 平台上使用 Firefox 时,遇到的最常见的不稳定原因就是崩溃,而且这一现象在 Windows 平台上的严重程度远高于 Linux 和 macOS。因此,Mozilla 花了大量的资源来减少 Firefox 的内存消耗,并仔细监测这些变化。然而,Mozilla 近日透露,他们此前所作出的所有努力都不如他们在 Firefox 105 中部署的一个小改变有效。
首先,要了解为什么在 Windows 上运行的应用程序与其他操作系统相比更容易耗尽内存产生崩溃,就必须了解 Windows 如何处理内存。
所有的现代操作系统都允许应用程序分配一块地址空间。最初在没有数据被存储在其中时,这些块只代表没有物理内存支持的地址范围。当一个应用程序开始使用它所保留的地址空间时,操作系统将拿出一块物理内存来支持它,如果需要的话,可能会交换掉一些现有的数据。Linux 和 macOS 都是这样工作的,Windows 也是如此,只是与其他操作系统相比,Windows 需要执行一个额外的步骤。
在一个应用程序请求了一块地址空间之后,应用需要在能够使用它之前提交使用范围,这个范围需要 Windows 保证它总是能够找到物理内存来支持它。之后,Windows 的行为就像 Linux 和 macOS 一样没什么区别了。因此,Windows 限制了可以提交的内存大小,即机器的物理内存加上交换文件的大小之和。
提交空间(commit space)是应用面对的硬限制,只要达到这个限制,内存分配就会失败。Firefox 开发者在分析浏览器崩溃问题时发现,在很多情况下发生崩溃时,用户设备上的可用物理内存仍然很多,但提交空间却耗尽了。
因此他们决定采用一些技巧来规避这一问题,也就是当内存分配失败时,浏览器不是立即崩溃,而是先等待下,然后尝试重新内存分配。虽然这会导致浏览器卡住短暂的几分之一秒,但远比彻底崩溃好得多(当交换文件快满时,Windows 会自动调整它的大小,增加可用的提交空间)。
Mozilla 在 Firefox 105 中应用了这一改变,显著改进了浏览器的稳定性。下面的图表显示了用户在每一个活跃的使用小时中经历了多少次内存耗尽的浏览器崩溃(崩溃次数减少了 70% 以上,远远超过了 Mozilla 当初的预测)。
Mozilla 表示,虽然他们已经在 Firefox 105 中实现了这项改进,但实际上这项改进还没有彻底完成,因为目前延缓主进程会导致标签页崩溃次数小幅增加,这对用户来说也是不愉快的使用体验,虽然没有完整的浏览器崩溃那么烦人,但团队依然在尝试减少这样的情况发生。
相关链接:https://hacks.mozilla.org/2022/11/improving-firefox-stability-with-this-one-weird-trick/
【填问卷 抽好礼】
往期推荐
马斯克晒出Twitter架构图
微软WSL 1.0发布
50万用户无人付费,Kite停止开发
这里有最新开源资讯、软件更新、技术干货等内容
点这里 ↓↓↓ 记得 关注✔ 标星⭐ 哦~
本文文字及图片出自 OSC开源社区
你也许感兴趣的:
- 【外评】谷歌浏览器(Google Chrome)将关闭扩展系统 Manifest V2,开启更严格的 Manifest V3
- Chrome 浏览器开发工具(DevTools)现在使用双子座(Gemini )来帮助处理控制台中的 JavaScript 错误
- 【Chromium Blog】机器学习如何改进 Windows、Mac 和 ChromeOS 上的 Chrome 浏览器地址栏
- 欧盟新科技法正在发挥作用–小型浏览器赢得市场份额
- 都 2024 年了还要兼容 IE
- 【译文】Firefox的衰落:Mozilla 曾经风靡一时的火狐浏览器渐行渐远
- 【译文】微软在 Edge 上不断作死
- 曾打败 IE 的 Firefox,正处于崩溃边缘!
- 微软在 Windows 11 上强推 exe 软件弹窗,只为让 Chrome 用户尝试 Bing ?!
- Safari 版本更新?开发者的噩梦之旅!
你对本文的反应是: