ウェブブラウザの利用中に「画面が突然閉じてしまった」という経験をしたことがある人は多いはず。ウェブブラウザ「Firefox」の開発チームの一員であるガブリエラ・スヴェルト氏は、Windows版Firefoxにおけるクラッシュを減らすために行ったメモリ最適化の概要を解説しています。

Improving Firefox stability with this one weird trick - Mozilla Hacks - the Web developer blog

https://hacks.mozilla.org/2022/11/improving-firefox-stability-with-this-one-weird-trick/

FirefoxはmacOSやLinuxといったWindows以外のOSにも提供されていますが、スヴェルト氏によるとメモリ不足に起因するクラッシュはWindows版Firefoxで最も多く発生するとのこと。Windowsにおけるクラッシュの多発は、Windowsのメモリ管理手法が影響しています。

Windowsを含む各種OSは、メモリが不足した際にスワップファイルを作成してシステムの動作を継続させようとします。この時、Windowsでは「仮想メモリをコミットする」という動作を行い、「コミット済みのメモリ」上にスワップファイルが作成されます。このため、「コミット済みのメモリ」が不足している状況ではスワップファイルが作成されず、メモリの割り当てが失敗してしまいます。



Firefoxの開発チームがクラッシュ時のメモリ使用量について検証した結果、Windowsでは物理メモリの空き容量が十分に残っていても「コミット済みのメモリ」が不足しているとFirefoxがクラッシュする現象が確認されました。しかし、この現象への直接的な対処は困難だったとのこと。そこで、開発チームは「メモリ割り当てが失敗した際に、クラッシュするのではなく短時間待機する」という動作をFirefoxに組み込み、メモリ割り当てが失敗した後にWindowsが仮想メモリをコミットするまで待機するように設定しました。

上記の変更を「Firefox 105」で正式公開した結果、メモリ不足に起因するクラッシュの発生率が70%以上減少したとのこと。また、Android版のFirefoxやFirefox OSに同様の変更を適用した結果、どちらのプラットフォームでもクラッシュ率が低下しました。



Firefoxの開発チームは、「コミット済みメモリの不足」と「物理メモリの不足」という異なる状況において適切なメモリ管理を実行するための開発に取り組んでいるとのことです。