0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

重新內(nèi)存分配的改變讓Firefox崩潰次數(shù)降低70%

OSC開源社區(qū) ? 來源: OSC開源社區(qū) ? 作者: OSC開源社區(qū) ? 2022-11-29 15:08 ? 次閱讀

用戶在 Windows 平臺上使用 Firefox 時,遇到的最常見的不穩(wěn)定原因就是崩潰,而且這一現(xiàn)象在 Windows 平臺上的嚴重程度遠高于 Linux 和 macOS。因此,Mozilla 花了大量的資源來減少 Firefox 的內(nèi)存消耗,并仔細監(jiān)測這些變化。然而,Mozilla 近日透露,他們此前所作出的所有努力都不如他們在 Firefox 105 中部署的一個小改變有效。

首先,要了解為什么在 Windows 上運行的應用程序與其他操作系統(tǒng)相比更容易耗盡內(nèi)存產(chǎn)生崩潰,就必須了解 Windows 如何處理內(nèi)存。 所有的現(xiàn)代操作系統(tǒng)都允許應用程序分配一塊地址空間。最初在沒有數(shù)據(jù)被存儲在其中時,這些塊只代表沒有物理內(nèi)存支持的地址范圍。當一個應用程序開始使用它所保留的地址空間時,操作系統(tǒng)將拿出一塊物理內(nèi)存來支持它,如果需要的話,可能會交換掉一些現(xiàn)有的數(shù)據(jù)。Linux 和 macOS 都是這樣工作的,Windows 也是如此,只是與其他操作系統(tǒng)相比,Windows 需要執(zhí)行一個額外的步驟。 在一個應用程序請求了一塊地址空間之后,應用需要在能夠使用它之前提交使用范圍,這個范圍需要 Windows 保證它總是能夠找到物理內(nèi)存來支持它。之后,Windows 的行為就像 Linux 和 macOS 一樣沒什么區(qū)別了。

因此,Windows 限制了可以提交的內(nèi)存大小,即機器的物理內(nèi)存加上交換文件的大小之和。 提交空間(commit space)是應用面對的硬限制,只要達到這個限制,內(nèi)存分配就會失敗。

Firefox 開發(fā)者在分析瀏覽器崩潰問題時發(fā)現(xiàn),在很多情況下發(fā)生崩潰時,用戶設備上的可用物理內(nèi)存仍然很多,但提交空間卻耗盡了。 因此他們決定采用一些技巧來規(guī)避這一問題,也就是當內(nèi)存分配失敗時,瀏覽器不是立即崩潰,而是先等待下,然后嘗試重新內(nèi)存分配。雖然這會導致瀏覽器卡住短暫的幾分之一秒,但遠比徹底崩潰好得多(當交換文件快滿時,Windows 會自動調(diào)整它的大小,增加可用的提交空間)。 Mozilla 在 Firefox 105 中應用了這一改變,顯著改進了瀏覽器的穩(wěn)定性。

下面的圖表顯示了用戶在每一個活躍的使用小時中經(jīng)歷了多少次內(nèi)存耗盡的瀏覽器崩潰(崩潰次數(shù)減少了 70% 以上,遠遠超過了 Mozilla 當初的預測)。

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

Mozilla 表示,雖然他們已經(jīng)在 Firefox 105 中實現(xiàn)了這項改進,但實際上這項改進還沒有徹底完成,因為目前延緩主進程會導致標簽頁崩潰次數(shù)小幅增加,這對用戶來說也是不愉快的使用體驗,雖然沒有完整的瀏覽器崩潰那么煩人,但團隊依然在嘗試減少這樣的情況發(fā)生。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 內(nèi)存
    +關注

    關注

    8

    文章

    2982

    瀏覽量

    73826
  • WINDOWS
    +關注

    關注

    3

    文章

    3523

    瀏覽量

    88330
  • Firefox
    +關注

    關注

    0

    文章

    97

    瀏覽量

    13639

原文標題:一個小改變,讓Firefox崩潰次數(shù)降低70%

文章出處:【微信號:OSC開源社區(qū),微信公眾號:OSC開源社區(qū)】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    轉載 golang內(nèi)存分配

    Go 的分配采用了類似 tcmalloc 的結構.特點: 使用一小塊一小塊的連續(xù)內(nèi)存頁, 進行分配某個范圍大小的內(nèi)存需求. 比如某個連續(xù) 8KB 專門用于
    的頭像 發(fā)表于 09-05 14:12 ?197次閱讀
    轉載 golang<b class='flag-5'>內(nèi)存</b><b class='flag-5'>分配</b>

    堆棧和內(nèi)存的基本知識

    本文主要聊聊關于堆棧的內(nèi)容。包括堆棧和內(nèi)存的基本知識。常見和堆棧相關的 bug,如棧溢出,內(nèi)存泄漏,堆內(nèi)存分配失敗等。后面介紹軟件中堆棧統(tǒng)計的重要性,以及如何使用工具工具軟件中堆棧使用
    的頭像 發(fā)表于 08-29 14:10 ?361次閱讀
    堆棧和<b class='flag-5'>內(nèi)存</b>的基本知識

    可以用os_malloc() 分配多少內(nèi)存?有哪些限制?

    我可以用 os_malloc() 分配多少內(nèi)存?有哪些限制?
    發(fā)表于 07-15 06:32

    esp8266如何正確釋放分配內(nèi)存?

    我為結構數(shù)組分配內(nèi)存,這是我的代碼: size_t taskAmount; object *tasks = Parsejson(subbuff,sizeof(subbuff),&
    發(fā)表于 07-12 12:34

    ESP8266隨機崩潰,不會自行啟動或重新啟動怎么處理?

    看門狗或軟件看門狗的幫助下崩潰,它也應該再次重新啟動并正常工作。為什么它期待硬重啟。 您能否建議問題的根本原因。模塊遇到這種情況的可能性有多大,為什么看門狗計時器無法幫助模塊啟動和運行,以及模塊在運行時環(huán)境中期望硬重啟的可能性有多大。懇請建議。
    發(fā)表于 07-11 07:41

    esp_mesh_set_parent函數(shù)成功連接后,如何設置重新連接次數(shù)?

    esp_mesh_set_parent函數(shù)成功連接后,斷開AP,該函數(shù)會不斷發(fā)起重新連接,如何設置重新連接次數(shù)?
    發(fā)表于 06-28 13:29

    ESP32S3+LVGL創(chuàng)建一個界面,請問能只在SPIRAM分配內(nèi)存,IRAM不分配嗎?

    各位前輩好。ESP32S3+LVGL的開發(fā)的過程中發(fā)現(xiàn),創(chuàng)建一個界面,會同時在SPIRAM和IRAM分配相同大小的內(nèi)存。請問能只在SPIRAM分配內(nèi)存,IRAM不
    發(fā)表于 06-06 07:45

    FreeRTOS如何在中斷中調(diào)用內(nèi)存分配函數(shù)?

    最近在玩FreeRTOS,遇到一個問題,就是不知如何在中斷中調(diào)用內(nèi)存分配函數(shù)。pvPortMalloc函數(shù)中會調(diào)用xTaskResumeAll,而這個函數(shù)不能再中斷調(diào)用,所以請問在中斷中進行內(nèi)存
    發(fā)表于 05-08 08:25

    Linux內(nèi)核內(nèi)存管理之內(nèi)核非連續(xù)物理內(nèi)存分配

    我們已經(jīng)知道,最好將虛擬地址映射到連續(xù)頁幀,從而更好地利用緩存并實現(xiàn)更低的平均內(nèi)存訪問時間。然而,如果對內(nèi)存區(qū)域的請求并不頻繁,那么考慮基于通過連續(xù)線性地址訪問非連續(xù)頁幀的分配方案是有意義的。該模式
    的頭像 發(fā)表于 02-23 09:44 ?851次閱讀
    Linux內(nèi)核<b class='flag-5'>內(nèi)存</b>管理之內(nèi)核非連續(xù)物理<b class='flag-5'>內(nèi)存</b><b class='flag-5'>分配</b>

    Linux內(nèi)核內(nèi)存管理之ZONE內(nèi)存分配

    內(nèi)核中使用ZONE分配器滿足內(nèi)存分配請求。該分配器必須具有足夠的空閑頁幀,以便滿足各種內(nèi)存大小請求。
    的頭像 發(fā)表于 02-21 09:29 ?852次閱讀

    ADSP-BF70x API的GPIO Server中為什么需要分配內(nèi)存空間給回調(diào)函數(shù)?

    我在使用adsp-bf70x的api時發(fā)現(xiàn),在adi_gpio_Init()調(diào)用后為回調(diào)函數(shù)分配內(nèi)存空間。這里為什么需要這樣做,我不太明白,請大家?guī)兔忉屢幌?,謝謝!
    發(fā)表于 01-12 08:28

    FreeRTOS內(nèi)存機制詳解

    FreeRTOS是一種實時操作系統(tǒng),它提供了多種內(nèi)存分配方式,包括動態(tài)內(nèi)存分配和靜態(tài)內(nèi)存分配
    的頭像 發(fā)表于 12-31 16:49 ?2471次閱讀
    FreeRTOS<b class='flag-5'>內(nèi)存</b>機制詳解

    什么是電壓崩潰?產(chǎn)生電壓崩潰的原因

    什么是電壓崩潰?產(chǎn)生電壓崩潰的原因? 電壓崩潰是指電源或電路中的電壓突然下降或消失的現(xiàn)象。它可能由多種原因引起,包括電源故障、電路過載、電路短路、電纜接觸不良、電子元件老化等。在本文中,我們將詳細
    的頭像 發(fā)表于 12-20 17:05 ?1732次閱讀

    嵌入式軟件內(nèi)存與指針相關問題

    隱性的內(nèi)存泄露問題 內(nèi)存泄漏(Memory Leak)是指程序中已動態(tài)分配的堆內(nèi)存由于某種原因程序未釋放或無法釋放,造成系統(tǒng)內(nèi)存的浪費,導致
    的頭像 發(fā)表于 12-07 16:07 ?408次閱讀

    java內(nèi)存溢出排查方法

    Java內(nèi)存溢出(Memory overflow)是指Java虛擬機(JVM)中的堆內(nèi)存無法滿足對象分配的需求,導致程序拋出OutOfMemoryError異常。內(nèi)存溢出是Java開發(fā)
    的頭像 發(fā)表于 11-23 14:46 ?3053次閱讀