この日記はMozillaのプロダクトへの貢献者としての私の成果を中心に、気になったバグやWeb界隈の話題について書いていますが、 断り書きがある場合を除き、いかなる団体のオフィシャルな見解ではありません。あくまでも個人的なものです。 Mozilla Foundation、Mozilla Corporation、及び関連企業の公式情報ではないことに注意してください。

現在、XHTML 1.0 (もどき)から、HTML5なコンテンツに修正中です。古い日記は修正が完了していませんので表示が崩れます。 順次、修正していく予定ですのでしばらくお待ちください。

もずはっく日記(2004年12月)

2004年12月6日

Bug 3919 ディスクキャッシュをオフにしているときの仮想メモリサイズ
初回投稿日時: 2004年12月06日16時29分27秒
最終更新日時: 2004年12月06日16時30分48秒
カテゴリ: Mozilla Core
SNS: (list)

メモリリークがあるために仮想メモリが解放されていないのではないか、という問題。

報告者の方もそうだし、一般的にもちょっとPCに詳しい人の間でなぜかメモリリークという用語は知れ渡っているが、メモリの確保と解放に関して正しい知識を持っている人は少ないと思う。 詳しいことはコメントに書いているが、基本的には次のように考えて問題無い。

まず、プログラムがメモリを確保しようとした場合、この場合、OSから必要なメモリが逐次割り当てられる、つまり追加消費される。これは多くの人の考えている通りでおおむね問題無い。正確ではないが。

次に、プログラムがメモリを解放した場合、そのメモリ領域はただちに他のアプリケーションに対して解放されることは無い。これをそうだと思っている人は是非、C言語のメモリ管理に関する文書・書籍を読むことをお勧めする。それは非常識なことだからだ。

メモリの確保、解放というのは実は実行速度を非常に低下させる。そのため、OSはアプリケーションが解放したメモリを逐次、他のアプリケーションに解放することはありえない。アプリケーションが再びメモリを確保しようとした際に、その部分を再度割り当てる方が実行速度のパフォーマンスは上がるためである。

そのため、メモリ監視ツールを利用して、アプリケーションの外側からメモリリークを検出することはできないのである。アプリケーションは解放したがOSがパフォーマンスのために確保したまま、という領域を含んでいるからだ。

メモリ監視ツールは現在のシステム状況を表示するものであり、デバッグツールではない。メモリ監視ツールの数値だけを見て、メモリリークが発生したというのは間違いなので、このようなバグ報告は今後、しないようにしてもらいたい。

ちなみに、WindowsでMozillaを最小化状態から通常の状態に戻すとディスクスワップが激しい、という話を時々見かけるが、これもMozillaの仕様ではない。OSのパフォーマンスチューニング仕様の結果である。OSがユーザにとって最も良いと考える総合的なパフォーマンスを提供しようとした場合に、Mozillaの様にメモリを使うアプリケーションのウインドウが最小化されている(つまり利用していない)場合には、その内容をディスクへ移し、他のアプリケーションのパフォーマンスを向上させているためだ。復帰速度の高速化を望むなら、そのアプリケーションのウインドウを最小化するのは誤りである。

関連するかもしれないエントリ

bug 3919を含むエントリ