0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

重新内存分配的改变让Firefox崩溃次数降低70%

OSC开源社区 来源: OSC开源社区 作者: OSC开源社区 2022-11-29 15:08 782次阅读

用户在 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 当初的预测)。

139da720-6e52-11ed-8abf-dac502259ad0.png

Mozilla 表示,虽然他们已经在 Firefox 105 中实现了这项改进,但实际上这项改进还没有彻底完成,因为目前延缓主进程会导致标签页崩溃次数小幅增加,这对用户来说也是不愉快的使用体验,虽然没有完整的浏览器崩溃那么烦人,但团队依然在尝试减少这样的情况发生。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内存
    +关注

    关注

    8

    文章

    3085

    浏览量

    74680
  • WINDOWS
    +关注

    关注

    4

    文章

    3588

    浏览量

    90166
  • Firefox
    +关注

    关注

    0

    文章

    97

    浏览量

    13790

原文标题:一个小改变,让Firefox崩溃次数降低70%

文章出处:【微信号:OSC开源社区,微信公众号:OSC开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    相关推荐

    使用OpenVINO™进行推理时的内存泄漏怎么解决?

    使用 OpenVINO™ 进行推理时,内存会随着时间的推移而增加,并导致程序崩溃
    发表于 03-06 08:29

    使用DevEco Studio高效解决鸿蒙原生应用内存问题

    在鸿蒙原生应用开发过程中,可能由于种种原因导致应用内存未被正常地使用或者归还至操作系统,从而引发内存异常占用、内存泄漏等问题,最终导致应用卡顿甚至崩溃,严重影响用户体验。
    的头像 发表于 01-16 14:44 371次阅读

    Firefox、Chrome和Puppeteer已支持WebDriver BiDi

    近期,我们与 BrowserStack 一起见证了 WebDriver BiDi 在 BrowserStack 中正式投入使用。并且 WebDriver BiDi 也继续得到了完善,Firefox
    的头像 发表于 11-06 16:35 717次阅读

    转载 golang内存分配

    Go 的分配采用了类似 tcmalloc 的结构.特点: 使用一小块一小块的连续内存页, 进行分配某个范围大小的内存需求. 比如某个连续 8KB 专门用于
    的头像 发表于 09-05 14:12 359次阅读
    转载 golang<b class='flag-5'>内存</b><b class='flag-5'>分配</b>

    如何自定义内存控制器的设置

    在FreeRTOS中自定义内存控制器的设置,主要涉及到内存分配策略的选择和配置。FreeRTOS提供了多种内存分配策略,如heap_1、he
    的头像 发表于 09-02 14:28 686次阅读

    堆栈和内存的基本知识

    本文主要聊聊关于堆栈的内容。包括堆栈和内存的基本知识。常见和堆栈相关的 bug,如栈溢出,内存泄漏,堆内存分配失败等。后面介绍软件中堆栈统计的重要性,以及如何使用工具工具软件中堆栈使用
    的头像 发表于 08-29 14:10 705次阅读
    堆栈和<b class='flag-5'>内存</b>的基本知识

    如何检测内存泄漏

    检测内存泄漏是软件开发过程中一项至关重要的任务,它有助于识别和解决那些导致程序占用过多内存资源,从而影响程序性能甚至导致程序崩溃的问题。以下将详细阐述几种常见的内存泄漏检测方法,每种方
    的头像 发表于 07-30 11:50 2699次阅读

    可以用os_malloc() 分配多少内存?有哪些限制?

    我可以用 os_malloc() 分配多少内存?有哪些限制?
    发表于 07-15 06:32

    esp8266如何正确释放分配内存

    我为结构数组分配内存,这是我的代码: size_t taskAmount; object *tasks = Parsejson(subbuff,sizeof(subbuff),&
    发表于 07-12 12:34

    ESP8266随机崩溃,不会自行启动或重新启动怎么处理?

    看门狗或软件看门狗的帮助下崩溃,它也应该再次重新启动并正常工作。为什么它期待硬重启。 您能否建议问题的根本原因。模块遇到这种情况的可能性有多大,为什么看门狗计时器无法帮助模块启动和运行,以及模块在运行时环境中期望硬重启的可能性有多大。恳请建议。
    发表于 07-11 07:41

    esp_mesh_set_parent函数成功连接后,如何设置重新连接次数

    esp_mesh_set_parent函数成功连接后,断开AP,该函数会不断发起重新连接,如何设置重新连接次数
    发表于 06-28 13:29

    nvs使用时出现的系统崩溃的原因?怎么解决?

    问题:设备使用nvs储存相关参数,设备开始正常使用,在一两个月后读参数的过程中出现系统崩溃,而且不是所以设备都有问题,只有百分之十以内会出现,在重新写完之后读会变正常以下是程序以及崩溃的log
    发表于 06-12 06:27

    ESP32S3+LVGL创建一个界面,请问能只在SPIRAM分配内存,IRAM不分配吗?

    各位前辈好。ESP32S3+LVGL的开发的过程中发现,创建一个界面,会同时在SPIRAM和IRAM分配相同大小的内存。请问能只在SPIRAM分配内存,IRAM不
    发表于 06-06 07:45

    FreeRTOS如何在中断中调用内存分配函数?

    最近在玩FreeRTOS,遇到一个问题,就是不知如何在中断中调用内存分配函数。pvPortMalloc函数中会调用xTaskResumeAll,而这个函数不能再中断调用,所以请问在中断中进行内存
    发表于 05-08 08:25

    13代及14代酷睿i9系列高端CPU游戏崩溃问题引发关注

    4 月 10 日讯,亚马逊 ZDNet Korea 报告指出,近期多名电脑用户在采用英特尔第 13 和 14 代酷睿 i9 高端处理器玩游戏时遇到了崩溃现象,如万代南梦宫游戏《铁拳 8》PC 演示版虽然配备较大的内存和显存,但仍无法避免频繁
    的头像 发表于 04-10 10:08 2384次阅读