Mozilla Flux

Mozilla関係の情報に特化したブログです。

メモリ管理に定評のあるFirefox、3.5でもその実力は健在

Chrome and Firefox 3.5 Memory Usage』でモダンブラウザのメモリ消費量を計測している。その結果、Firefox 3.5は大量のタブを開いてもメモリ消費量が抑えられているだけでなく、タブを閉じたときはちゃんとメモリを解放し、非常に効率的にメモリを使用していることが判明した。

上記記事の説明によると、使用したWebブラウザは「Google Chrome 3.0 Dev」「Firefox 3.5 RC」「Safari 4.0 for Windows」「Opera 10b」の四つ。OSは32bit版Windows Vista Home Premiumで、PCの搭載メモリは4GBである。「Alexa top sites」から上位150のWebサイトをピックアップし、各ブラウザで1タブずつ開いていった。ただし、メモリの解放についても調べる必要があるため、30タブ開いた後1タブを残してその他は閉じ、また30タブを開いて1タブ残す形で閉じるという処理を繰り返した。

手順の詳細、使用したプログラムのコード、結果のグラフなどは原記事を参照していただきたい。ここでは、メモリ使用量の表だけを画像として掲げておく。

メモリの最大消費量を見ると、Google Chrome(以下Chrome)が極めて多く1216.16MBとなっている。これに対し、Firefox 3.5は327.65MBにとどまっており、その差は4倍近い。一方、最小消費量はChromeも109.49MBでFirefoxとほぼ並んでいる。マルチプロセスを採用するChromeは、タブを開けば開くほど大量のメモリを消費する代わりに、タブを閉じたときは素直にメモリを解放する仕組みになっていることが窺える。

OperaやSafariはChromeほど極端ではないものの、Firefox 3.5と比べるとメモリの使用効率は落ちる。とくに、Opera 10 Beta 1がタブを閉じてもあまりメモリを解放しない点は気になるところだ。せっかくの軽快さを阻害してしまうのではないだろうか。

ところで、Firefox.next(3.5の次のバージョン)では、マルチプロセス化が検討されており、すでに基礎的な作業が始まっている。コンテンツとUIのプロセスを分け、コンテンツの内部で複数のプロセスをもつ形だ。他方で、それは効率的なメモリ使用という自らの長所を捨てることにもつながる。

いちおう、Mozillaの説明では単純なマルチプロセス化ではなく、「プロセス・オン・デマンド」ということになっている。そのため、おそらくFennec(Firefox Mobile)ではコンテンツは単一プロセスにとどめ、メモリ消費量を抑えてくるはずだ。

Firefox.nextはどうだろう。30タブを開いて1GB以上のメモリを喰うとなれば、さすがにユーザーから批判が出るだろう。マルチプロセスでありつつ、メモリ消費を抑える斬新なメカニズムがあればよいが、もしあるならChromeが先に実装していそうなもので、この道を行くのは難しそうだ。あとは、ユーザーが設定で変更可能にするという手がある。これも実際にできるかどうかは不明だが、実現すれば、PCの搭載メモリに合わせて運用できるから、たいていのケースで問題は解消すると思う。

(同日追記)
コメント欄でkuさんから元記事の問題点について指摘していただいた。それによると、元記事がカウントしているメモリ消費量は、共有メモリを考慮していないため、実際よりも多くなってしまっているという。

Chromium Blogの『Google Chrome Memory Usage - Good and Bad』が推定しているところでは、多数のプロセスが存在する場合、単純に合算すると30〜40%余計にカウントしてしまうそうだ。仮に40%とすると、「1216.16MB」は実際には約730MBとなる。それでもFirefoxの倍以上ではあるが。

また、GoogleのMike Belshe氏が『Memory usage in chrome』で追試したところでは、Chromium 3.0.189.0が561MBで、Firefox 3.5 Beta 4が146MBという結果になった。ただ、同氏はこのテストがユーザーの実際の行動をあまりうまく反映していないのではないかとも述べている。

(同日再追記)
ITmediaの海外速報部ログ『Firefox 3.5はメモリ管理がとっても優秀という話』も参照。同じ素材を扱っているが、さすがにプロが書いているだけあって、内容がわかりやすく、注目の引き方もうまい。