用戶(hù)在 Windows 平臺(tái)上使用 Firefox 時(shí),遇到的最常見(jiàn)的不穩(wěn)定原因就是崩潰,而且這一現(xiàn)象在 Windows 平臺(tái)上的嚴(yán)重程度遠(yuǎn)高于 Linux 和 macOS。因此,Mozilla 花了大量的資源來(lái)減少 Firefox 的內(nèi)存消耗,并仔細(xì)監(jiān)測(cè)這些變化。然而,Mozilla 近日透露,他們此前所作出的所有努力都不如他們?cè)?Firefox 105 中部署的一個(gè)小改變有效。
首先,要了解為什么在 Windows 上運(yùn)行的應(yīng)用程序與其他操作系統(tǒng)相比更容易耗盡內(nèi)存產(chǎn)生崩潰,就必須了解 Windows 如何處理內(nèi)存。 所有的現(xiàn)代操作系統(tǒng)都允許應(yīng)用程序分配一塊地址空間。最初在沒(méi)有數(shù)據(jù)被存儲(chǔ)在其中時(shí),這些塊只代表沒(méi)有物理內(nèi)存支持的地址范圍。當(dāng)一個(gè)應(yīng)用程序開(kāi)始使用它所保留的地址空間時(shí),操作系統(tǒng)將拿出一塊物理內(nèi)存來(lái)支持它,如果需要的話,可能會(huì)交換掉一些現(xiàn)有的數(shù)據(jù)。Linux 和 macOS 都是這樣工作的,Windows 也是如此,只是與其他操作系統(tǒng)相比,Windows 需要執(zhí)行一個(gè)額外的步驟。 在一個(gè)應(yīng)用程序請(qǐng)求了一塊地址空間之后,應(yīng)用需要在能夠使用它之前提交使用范圍,這個(gè)范圍需要 Windows 保證它總是能夠找到物理內(nèi)存來(lái)支持它。之后,Windows 的行為就像 Linux 和 macOS 一樣沒(méi)什么區(qū)別了。
因此,Windows 限制了可以提交的內(nèi)存大小,即機(jī)器的物理內(nèi)存加上交換文件的大小之和。 提交空間(commit space)是應(yīng)用面對(duì)的硬限制,只要達(dá)到這個(gè)限制,內(nèi)存分配就會(huì)失敗。
Firefox 開(kāi)發(fā)者在分析瀏覽器崩潰問(wèn)題時(shí)發(fā)現(xiàn),在很多情況下發(fā)生崩潰時(shí),用戶(hù)設(shè)備上的可用物理內(nèi)存仍然很多,但提交空間卻耗盡了。 因此他們決定采用一些技巧來(lái)規(guī)避這一問(wèn)題,也就是當(dāng)內(nèi)存分配失敗時(shí),瀏覽器不是立即崩潰,而是先等待下,然后嘗試重新內(nèi)存分配。雖然這會(huì)導(dǎo)致瀏覽器卡住短暫的幾分之一秒,但遠(yuǎn)比徹底崩潰好得多(當(dāng)交換文件快滿時(shí),Windows 會(huì)自動(dòng)調(diào)整它的大小,增加可用的提交空間)。 Mozilla 在 Firefox 105 中應(yīng)用了這一改變,顯著改進(jìn)了瀏覽器的穩(wěn)定性。
下面的圖表顯示了用戶(hù)在每一個(gè)活躍的使用小時(shí)中經(jīng)歷了多少次內(nèi)存耗盡的瀏覽器崩潰(崩潰次數(shù)減少了 70% 以上,遠(yuǎn)遠(yuǎn)超過(guò)了 Mozilla 當(dāng)初的預(yù)測(cè))。
Mozilla 表示,雖然他們已經(jīng)在 Firefox 105 中實(shí)現(xiàn)了這項(xiàng)改進(jìn),但實(shí)際上這項(xiàng)改進(jìn)還沒(méi)有徹底完成,因?yàn)槟壳把泳徶鬟M(jìn)程會(huì)導(dǎo)致標(biāo)簽頁(yè)崩潰次數(shù)小幅增加,這對(duì)用戶(hù)來(lái)說(shuō)也是不愉快的使用體驗(yàn),雖然沒(méi)有完整的瀏覽器崩潰那么煩人,但團(tuán)隊(duì)依然在嘗試減少這樣的情況發(fā)生。
-
內(nèi)存
+關(guān)注
關(guān)注
8文章
3115瀏覽量
75055 -
WINDOWS
+關(guān)注
關(guān)注
4文章
3608瀏覽量
91073 -
Firefox
+關(guān)注
關(guān)注
0文章
97瀏覽量
13946
原文標(biāo)題:一個(gè)小改變,讓Firefox崩潰次數(shù)降低70%
文章出處:【微信號(hào):OSC開(kāi)源社區(qū),微信公眾號(hào):OSC開(kāi)源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
工業(yè)APP頻繁崩潰?聚徽廠家分享安卓工控機(jī)內(nèi)存碎片化與進(jìn)程管理優(yōu)化指南
如何避免存儲(chǔ)示波器再次崩潰?
HarmonyOS優(yōu)化應(yīng)用內(nèi)存占用問(wèn)題性能優(yōu)化一
如何使用LAX_CODEGEN啟用動(dòng)態(tài)內(nèi)存分配?
如何查看S32DS中S32平臺(tái)的內(nèi)存分配?
golang內(nèi)存分配

S32G3板卡上內(nèi)核崩潰后自動(dòng)重啟怎么解決?
轉(zhuǎn)載 golang內(nèi)存分配

如何自定義內(nèi)存控制器的設(shè)置
堆棧和內(nèi)存的基本知識(shí)

評(píng)論