firefoxがメモリを沢山食う件

昔のSleipnir1.66の時代からすればどのブラウザも信じられないくらい重くなってる気がする今日この頃ですが、気になる記事

Firefox のメモリー問題はバグではない、仕様であるということが改めて主張されていますが、しかしバグでなければ Firefox 2.0(RC 版で)はメモリーの使用量はぐっと減っているし、Firefox 3.0 では更に劇的に減るらしくバグではないとするとプログラムの書き方がメモリーを余計に使うようになっていたということでしょうか.

Geckodevもじら組での議論を鑑みると結構根が深い問題なのかなぁ、とは思う。

メモリサイズとプログラムの軽さはトレードオフにあるわけで、プログラミングの常識からすれば、mallocやcallocには時間がかかる*1のだから、最初にそれを沢山してメモリを確保していけば、キャッシュを保持する度にmallocするよりはパフォーマンスが向上するだろうというチューニングテクニックのつもりで、「仕様だ」ということになったのだろう。

じゃあ、メモリが十分多ければいいじゃん、ということになる。仮想メモリまで考えれば必要以上のメモリ量を十分に賄えるので、大量のキャッシュを保持すればいくらでも速くなるのではないか。と思いがちだが、そうは問屋が卸さない。仮想メモリというのが曲者で、こいつはページングというのをやっていて、物理メモリをはみ出そうなメモリはさっさとHDDのスワップ領域に移してしまう。このときのHDDアクセスは、メモリアクセスに比べれば変態的に遅いので、おそらくはこのページングのせいでFirefoxが重くなってしまっているのではないかと邪推する。もっといえば、WindowsというOS自体がページングをやたらしている*2ためだと思う。

話は変わるけど、IE6が(Windowが少ないときだけだが)速い気がするのは、あの「カチッ」というシステムサウンドの効果*3のおかげだろう。今となってはそんなに優れたブラウザではない。実際、タブブラウザであるIE7とFirefox2を同時に使う機会があるが、体感で遅いのは前者だ。IE7のメモリ消費量をきちんと観察したことはないが、同じ条件下ならFirefox2の方がメモリサイズvsキャッシュのパフォーマンスで勝っているはずだ。

*1:ちょっと大規模なC/C++をやった人なら実感できるらしい

*2:気がするだけで、実際に調べたわけではないが、Linuxと比べれば有意に多いだろう。topとタスクマネージャを睨むのが私の好きな行為のひとつでもある

*3:Sound Effect!!