← C#

LESSON / ARTICLE

メモリ管理とガベージコレクション

マネージドヒープ、世代別GC、割り当てと回収の考え方を学びます。

マネージドメモリ

.NETの多くのオブジェクトはマネージドヒープに割り当てられ、ガベージコレクター(GC)が到達不能になったオブジェクトのメモリを回収します。

到達可能性

GCは、スタック上の参照や静的フィールドなどのルートからたどれるオブジェクトを生存していると判断します。参照が残っている限り、不要だと思っているオブジェクトでも回収されないことがあります。

世代別GC

短命なオブジェクトが多いという性質を利用し、GCは世代を分けて回収を行います。世代0、1、2があり、長く生存するオブジェクトほど上位世代へ昇格する可能性があります。

割り当てを意識する

一時的なオブジェクトを大量に作ると、GCの負荷が増えることがあります。ただし、早すぎる最適化は避け、計測で割り当てが問題だと分かった箇所を改善します。

GCはメモリ管理を自動化しますが、ファイルやソケットなどの外部リソースを自動的に適切なタイミングで解放する仕組みではありません。