概要
プログラム内でデータを溜めておきたい場合、OSに頼んでメモリの領域を確保してもらい、その領域内にデータをおく。使い終わったら解放する必要があるが、自動的にはされないのでプログラムの責任で解放の操作をする必要がある。このとき何らかの理由で解放の操作がされなかった場合、その領域はプログラム内にいつまでも居残り続けることになる。この状態をメモリリークという。借りた物を返さない奴は最低である。即刻KILLすべき。
メモリリークを起こした時点でプログラムがおかしくなるというわけではないので、発生箇所の特定が困難で見過ごされがちのバグである。デーモンのように長時間使用される物で起こった場合、メモリをじわじわと食いつぶしていき、しまいには自身の動作を続けることができなくなる。それだけでなくほかのプログラムの動作を阻害させたり、そもそも起動させなくしたりと、システム全体が極めて不安定になる。このため、メモリリークは致命的なバグである。
とはいえ、プログラムを終了させれば食いつぶしていた領域はきれいさっぱり無くなる(はず)。メモリリークが起こるのを織り込み済みにしておき、「システムメンテナンス」と称して定期的に再起動をする、という運用をしているサービスも多い。動けば正義なのである。
メモリリークが起きないようにメモリの解放を自動的に行うようにする機構をガベージコレクションという。スクリプトや最近開発された言語ではこのメモリ管理を使っていることが多い。
関連項目
- 5
- 0pt