最終更新日:2026年10月7日
fe fe-technology software
まず結論
メモリリーク(memory leak)とは、プログラムが確保したメモリのうち、不要になった領域を適切に解放・再利用できず、利用可能なメモリが徐々に減っていく問題です。
流れで覚えると簡単です。
メモリを確保
↓
処理で使用
↓
もう不要
↓
本来は解放・再利用できる
↓
できない
↓
繰り返すと使用メモリが増えていく
= メモリリーク
直感的な説明
作業机から、使い終わった資料を片付けない状態を考えます。
最初
[使用][空き][空き][空き]
処理を繰り返す
[不要][使用][空き][空き]
さらに繰り返す
[不要][不要][使用][空き]
さらに……
[不要][不要][不要][使用]
資料そのものはもう必要ないのに、机の場所だけ占有し続けています。
メモリリークも同じように、もう必要のない領域をプログラムが保持し続けるため、新しい処理に使えるメモリが減っていくと考えると分かりやすいです。
定義・仕組み
プログラムは処理に必要なデータを置くためにメモリ領域を確保します。
その領域が不要になれば、再び利用できる状態にする必要があります。
正常
確保 → 使用 → 不要 → 解放・再利用
メモリリーク
確保 → 使用 → 不要 → 保持されたまま
↓
再利用できない
これが何度も起こると、長時間動作するプログラムなどでは使用可能なメモリが減り、性能低下やメモリ不足につながることがあります。
ガベージコレクションとの関係
ガベージコレクション(GC)は、プログラムから到達できなくなったオブジェクトなど、不要になったメモリ領域を自動的に回収して再利用できるようにする仕組みです。
もう参照されないオブジェクト
↓
GCが回収
↓
メモリを再利用可能にする
ただし、GCがある言語ならメモリリークが絶対に起きない、という意味ではありません。
例えば、もう使わないオブジェクトへの参照をプログラムが保持し続けていると、GCから見ると「まだ使われる可能性があるオブジェクト」です。
実際には不要
↓
でも参照が残っている
↓
GCは回収できない
↓
メモリ使用量が増える
そのため、GCの有無とメモリリークの有無を単純に同一視しないことが重要です。
フラグメンテーションとの違い
フラグメンテーションとメモリコンパクションとは、問題の種類が違います。
| 現象 | 何が問題? |
|---|---|
| メモリリーク | 不要な領域を解放・再利用できない |
| 内部フラグメンテーション | 割当て領域の中に無駄ができる |
| 外部フラグメンテーション | 空き領域が細かく分散する |
特に外部フラグメンテーションでは、空き容量そのものは存在しています。
外部フラグメンテーション
→ 空きはある
→ ただし細切れ
メモリリーク
→ 不要な領域が占有されたまま
→ 利用できる空きが減る
科目Aでどう出る?
問題文では「不要になったメモリ」「解放されない」「長時間動作すると使用量が増える」といった表現を探します。
| 問題文の表現 | 判断 |
|---|---|
| 不要なメモリ領域が解放されない | メモリリーク |
| 空き領域が細切れになる | 外部フラグメンテーション |
| 散在した空きをまとめる | メモリコンパクション |
| 不要なオブジェクトを自動回収する | ガベージコレクション |
| プロセス全体を補助記憶へ退避する | スワッピング |
試験では、「空きが散らばっている」のか「不要な領域を保持している」のかを区別すると判断しやすくなります。
どんな場面で使う?
長時間動作するサーバやアプリケーションで、処理を繰り返すたびにメモリ使用量が増えていく場合を考えます。
起動直後 100MB
しばらく後 300MB
さらに後 600MB
さらに後 900MB
処理量が増えたため一時的にメモリ使用量が増えているだけの場合もあるため、メモリ使用量が増えたことだけで直ちにメモリリークとは断定できません。
不要なデータが解放・回収されず保持され続けているかを見る必要があります。
よくある誤解・混同
メモリリークはメモリが物理的に壊れて漏れる現象
違います。「leak(漏れ)」という名前ですが、RAMから何かが物理的に漏れるわけではありません。
不要なメモリ領域を使える状態へ戻せず、利用可能なメモリを失っていくという意味です。
メモリリークとフラグメンテーションは同じ
違います。
メモリリーク
→ 不要な領域を手放せない
フラグメンテーション
→ メモリ領域の割当てによって無駄や分断が生じる
外部フラグメンテーションならメモリコンパクションで空きをまとめる考え方がありますが、メモリリークはコンパクションだけでは解決しません。
ガベージコレクションがあればメモリリークは起きない
GCは不要になった領域の自動回収を助けますが、プログラムが不要なオブジェクトへの参照を保持していれば、回収対象にならないことがあります。
したがって、
GCあり
≠
メモリリークが絶対にない
と覚えます。
まとめ(試験直前用)
- メモリリークは、不要なメモリを解放・再利用できず、利用可能なメモリが減っていく問題
- 「確保 → 使用 → 不要 → 解放されない」の流れで覚える
- フラグメンテーションはメモリ配置・割当てによる無駄や分断の問題で、メモリリークとは別
- ガベージコレクションは不要なメモリ領域を自動回収する仕組み
- GCがあっても、不要なオブジェクトへの参照が残ればメモリリークは起こり得る
- メモリ使用量の増加だけでメモリリークと断定せず、不要な領域が保持され続けているかを見る