用戶在 Windows 平臺上使用 Firefox 時,遇到的最常見的不穩(wěn)定原因就是崩潰,而且這一現(xiàn)象在 Windows 平臺上的嚴(yán)重程度遠(yuǎn)高于 Linux 和 macOS。因此,Mozilla 花了大量的資源來減少 Firefox 的內(nèi)存消耗,并仔細(xì)監(jiān)測這些變化。然而,Mozilla 近日透露,他們此前所作出的所有努力都不如他們在 Firefox 105 中部署的一個小改變有效。
首先,要了解為什么在 Windows 上運(yùn)行的應(yīng)用程序與其他操作系統(tǒng)相比更容易耗盡內(nèi)存產(chǎn)生崩潰,就必須了解 Windows 如何處理內(nèi)存。 所有的現(xiàn)代操作系統(tǒng)都允許應(yīng)用程序分配一塊地址空間。最初在沒有數(shù)據(jù)被存儲在其中時,這些塊只代表沒有物理內(nèi)存支持的地址范圍。當(dāng)一個應(yīng)用程序開始使用它所保留的地址空間時,操作系統(tǒng)將拿出一塊物理內(nèi)存來支持它,如果需要的話,可能會交換掉一些現(xiàn)有的數(shù)據(jù)。Linux 和 macOS 都是這樣工作的,Windows 也是如此,只是與其他操作系統(tǒng)相比,Windows 需要執(zhí)行一個額外的步驟。 在一個應(yīng)用程序請求了一塊地址空間之后,應(yīng)用需要在能夠使用它之前提交使用范圍,這個范圍需要 Windows 保證它總是能夠找到物理內(nèi)存來支持它。之后,Windows 的行為就像 Linux 和 macOS 一樣沒什么區(qū)別了。
因此,Windows 限制了可以提交的內(nèi)存大小,即機(jī)器的物理內(nèi)存加上交換文件的大小之和。 提交空間(commit space)是應(yīng)用面對的硬限制,只要達(dá)到這個限制,內(nèi)存分配就會失敗。
Firefox 開發(fā)者在分析瀏覽器崩潰問題時發(fā)現(xiàn),在很多情況下發(fā)生崩潰時,用戶設(shè)備上的可用物理內(nèi)存仍然很多,但提交空間卻耗盡了。 因此他們決定采用一些技巧來規(guī)避這一問題,也就是當(dāng)內(nèi)存分配失敗時,瀏覽器不是立即崩潰,而是先等待下,然后嘗試重新內(nèi)存分配。雖然這會導(dǎo)致瀏覽器卡住短暫的幾分之一秒,但遠(yuǎn)比徹底崩潰好得多(當(dāng)交換文件快滿時,Windows 會自動調(diào)整它的大小,增加可用的提交空間)。 Mozilla 在 Firefox 105 中應(yīng)用了這一改變,顯著改進(jìn)了瀏覽器的穩(wěn)定性。
下面的圖表顯示了用戶在每一個活躍的使用小時中經(jīng)歷了多少次內(nèi)存耗盡的瀏覽器崩潰(崩潰次數(shù)減少了 70% 以上,遠(yuǎn)遠(yuǎn)超過了 Mozilla 當(dāng)初的預(yù)測)。

Mozilla 表示,雖然他們已經(jīng)在 Firefox 105 中實(shí)現(xiàn)了這項(xiàng)改進(jìn),但實(shí)際上這項(xiàng)改進(jìn)還沒有徹底完成,因?yàn)槟壳把泳徶鬟M(jìn)程會導(dǎo)致標(biāo)簽頁崩潰次數(shù)小幅增加,這對用戶來說也是不愉快的使用體驗(yàn),雖然沒有完整的瀏覽器崩潰那么煩人,但團(tuán)隊(duì)依然在嘗試減少這樣的情況發(fā)生。
-
內(nèi)存
+關(guān)注
關(guān)注
8文章
3159瀏覽量
75957 -
WINDOWS
+關(guān)注
關(guān)注
4文章
3623瀏覽量
92841 -
Firefox
+關(guān)注
關(guān)注
0文章
97瀏覽量
14249
原文標(biāo)題:一個小改變,讓Firefox崩潰次數(shù)降低70%
文章出處:【微信號:OSC開源社區(qū),微信公眾號:OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
FAQ_MA35_Family M4 RAM如何調(diào)整M4的內(nèi)存分配?
靈活高效雙引擎驅(qū)動:ZBUFF讓C語言內(nèi)存操作更智能!
工業(yè)APP頻繁崩潰?聚徽廠家分享安卓工控機(jī)內(nèi)存碎片化與進(jìn)程管理優(yōu)化指南
如何避免存儲示波器再次崩潰?
HarmonyOS優(yōu)化應(yīng)用內(nèi)存占用問題性能優(yōu)化一
如何使用LAX_CODEGEN啟用動態(tài)內(nèi)存分配?
如何查看S32DS中S32平臺的內(nèi)存分配?
golang內(nèi)存分配
S32G3板卡上內(nèi)核崩潰后自動重啟怎么解決?
使用OpenVINO?進(jìn)行推理時的內(nèi)存泄漏怎么解決?
使用DevEco Studio高效解決鴻蒙原生應(yīng)用內(nèi)存問題
如何使用DevEco Studio性能調(diào)優(yōu)工具Profiler定位應(yīng)用內(nèi)存問題

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