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

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

3天内不再提示

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

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

用户在 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

    文章

    2767

    浏览量

    72777
  • WINDOWS
    +关注

    关注

    3

    文章

    3440

    浏览量

    87145
  • Firefox
    +关注

    关注

    0

    文章

    93

    浏览量

    13561

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

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

收藏 人收藏

    评论

    相关推荐

    Linux内核内存管理之内核非连续物理内存分配

    我们已经知道,最好将虚拟地址映射到连续页帧,从而更好地利用缓存并实现更低的平均内存访问时间。然而,如果对内存区域的请求并不频繁,那么考虑基于通过连续线性地址访问非连续页帧的分配方案是有意义的。该模式
    的头像 发表于 02-23 09:44 383次阅读
    Linux内核<b class='flag-5'>内存</b>管理之内核非连续物理<b class='flag-5'>内存</b><b class='flag-5'>分配</b>

    Linux内核内存管理之ZONE内存分配

    内核中使用ZONE分配器满足内存分配请求。该分配器必须具有足够的空闲页帧,以便满足各种内存大小请求。
    的头像 发表于 02-21 09:29 422次阅读

    ADSP-BF70x API的GPIO Server中为什么需要分配内存空间给回调函数?

    我在使用adsp-bf70x的api时发现,在adi_gpio_Init()调用后为回调函数分配内存空间。这里为什么需要这样做,我不太明白,请大家帮忙解释一下,谢谢!
    发表于 01-12 08:28

    java内存溢出排查方法

    Java内存溢出(Memory overflow)是指Java虚拟机(JVM)中的堆内存无法满足对象分配的需求,导致程序抛出OutOfMemoryError异常。内存溢出是Java开发
    的头像 发表于 11-23 14:46 702次阅读

    如何在Windows下使用 Supervisor 重新拉起崩溃的Python程序

    我们用Python定时跑一些自动化程序的时候会出现程序崩溃的情况。此时如果你本人不在电脑面前,或者没有留意到程序的崩溃,没有及时重新拉起程序,会造成或大或小的损失。 本文将教你如何在 Windows
    的头像 发表于 10-21 11:23 1175次阅读
    如何在Windows下使用 Supervisor <b class='flag-5'>重新</b>拉起<b class='flag-5'>崩溃</b>的Python程序

    如何高效管理MCU内存? 多种分配算法对比?

    如何高效管理MCU内存? 多种分配算法对比?
    的头像 发表于 10-17 18:21 711次阅读
    如何高效管理MCU<b class='flag-5'>内存</b>? 多种<b class='flag-5'>分配</b>算法对比?

    高级内存调试和泄漏检测1.0版

    它可以回答的问题和可以解决的问题包括: ·我使用了多少内存? ·我的代码中哪些部分分配内存最多? ·是否存在内存泄漏--我在哪里没有释放内存
    发表于 08-28 08:05

    Mozilla检测到Firefox出现了大量崩溃事件

    这些崩溃事件发生的十分突然,一开始 Mozilla 检测到数以千计使用一个名为 Huayra 的 Debian 发行版的用户受到影响,特别是 Huayra 5(基于 Debian 10)。后续的持续检测发现,这个问题影响了几乎所有基于旧版本 Debian 的发行版。
    的头像 发表于 08-07 16:33 616次阅读
    Mozilla检测到<b class='flag-5'>Firefox</b>出现了大量<b class='flag-5'>崩溃</b>事件

    heap_4内存分配方法介绍

    heap_4 内存分配方法 heap_4 提供了一个最优的匹配算法,不像 heap_2,heap_4 会将内存碎片合并成一个大的可用内存块,它提供了
    的头像 发表于 07-30 10:42 503次阅读

    FreeRTOS heap_3内存分配方法

    heap_3 内存分配方法 这个分配方法是对标准 C 中的函数 malloc()和 free()的简单封装,FreeRTOS 对这两个函数做了线程保护。 heap_3 的特性如下: 1、需要编译器
    的头像 发表于 07-30 10:40 416次阅读
    FreeRTOS heap_3<b class='flag-5'>内存</b><b class='flag-5'>分配</b>方法

    heap_2内存的特性与分配方法

    heap_2 内存分配方法 heap_2 提供了一个更好的分配算法,不像 heap_1那样,heap_2 提供了内存释放函数。heap_2 不会把释放的
    的头像 发表于 07-30 10:36 375次阅读

    heap_1内存分配方法

    heap_1 内存分配方法 动 态 内 存 分 配 需 要 一 个 内 存 堆 , FreeRTOS 中 的 内 存 堆 为 ucHeap
    的头像 发表于 07-30 10:33 378次阅读

    哪些原因会导致SOLIDWORKS崩溃

    是SOLIDWORKS崩溃的一些常见原因: 内存不足 SOLIDWORKS需要大量的内存才能正常工作,尤其当它处理大型装配体和复杂的表面时,更需要更多的内存。如果计算机的
    的头像 发表于 07-17 14:31 1250次阅读

    Google在一个函数中放入2万个变量引发Firefox崩溃

    近日,Mozilla 检测到 Firefox 出现了大量崩溃事件,这个问题主要发生在使用 Linux 系统的用户身上,尤其是使用基于旧版本 Debian 的 Linux 系统上。
    的头像 发表于 06-26 16:58 410次阅读
    Google在一个函数中放入2万个变量引发<b class='flag-5'>Firefox</b>大<b class='flag-5'>崩溃</b>

    S32K342控制器为什么只有27kB被分配为默认内存

    。 上面提到的以下FLASH 内存会在项目创建后反映在链接描述文件中,但SRAM不一样,分配内存 仅为 27kB。 我想你澄清为什么只有 27kB 被
    发表于 05-19 06:46