メモリリーク
なぜならば、仮にメモリが(不必要に思われるほど)大量に消費されていたとしても、そのプログラムが本当にそれだけのメモリを必要としていたり、将来必要になるという理由で確保したりしている可能性があるからである。単にメモリを無駄遣いしているだけということもありうる(プログラムのバグではあってもメモリリークではない)。
また、メモリを解放しているはずなのにプログラムの使用メモリが減らない現象を見て、メモリリークが疑われる場合がある。実は、ほとんどのアプリケーションソフトウェアプログラムはメモリの確保・解放処理を、OS固有の下位レベルAPIを直接利用して行なっているわけではなく、その上位層として構築されたライブラリ(C言語のmalloc関数など)や仮想マシン(Java仮想マシンや.NETのCLRなど)を経由して行なっている。アプリケーションがいったん確保・解放したメモリは、のちの再確保処理を高速化するためにライブラリや仮想マシンが蓄えておく(プールしておく)ため、OSから見えるメモリの使用量が減らないように見えているのである。
メモリリークを診断するためには、一般的にはプログラムの論理構造を調べる、デバッガを使って内部状態を確認するなどの手段をとる必要がある。時系列に沿ってメモリ消費量をトレースすることによりヒントが得られることもある。キャッシュを使うプログラムの場合、設定を間違えていれば消費メモリのサイズはシステムを停止させるまで際限なく増え続けてゆくかもしれない。メモリリークが発生していることが分かっている場合、最も単純な原因調査の方法は、しばらくシステムを放置した後にメモリ上の適当なオブジェクトを拾うことである。同じ種類のオブジェクトが大量に見つかれば、おそらくその発生源がリーク元である。メモリのダンプを取得して解析することも診断手段である。Windows用にはマイクロソフトから無料のツールが用意されている。
しばしば、メモリを大量に消費する症状のみを見て、プログラムがメモリリークを起こしていると誤診断されることがある。しかし、メモリの消費量のみからメモリリークか否かを判断するのは難しい。