.net column

.NET開発者のためのブログメディア
メモリ

C#のガベージコレクションとは

2019年10月28日

ガベージコレクションという用語を知っているでしょうか。メモリ管理について学習する時には必ず出てくる単語です。今回はこのガベージコレクションをご紹介します。

PG
ガベージコレクションってたまに聞きますけど、どういった意味なのでしょうか。
PL
ガベージコレクションとは直訳すると「ゴミ集め」や「ゴミ拾い」という意味になります。自動的に不要なメモリ領域を解放してくれる、開発者にとって非常にありがたい便利な機能になりますね。

C#でのガベージコレクションの概要

ガベージコレクションとは、不要となったメモリ領域を自動的に解放してくれる機能です。C#をはじめ、Java、PHP、Pythonといった高水準言語にもこの機能は搭載されています。

ガベージコレクションが実装される前までは、プログラマーが各自でメモリの確保と解放を行っていました。今でもガベージコレクションが実装されていないC言語での開発を行う場合は、プログラマーがメモリの確保と解放の処理を各自でコーディングします。

プログラマーが各自で行うということは、メモリの確保は行っても、解放の処理を忘れるというミスが発生する可能性があります。

解放処理を忘れたプログラムが実行されるたびに、メモリ上に不要なリソースが残り続けます。最終的には使用可能なメモリがなくなり、プログラムが動かなくなります。これを「メモリリーク」といいます。

C#でのガベージコレクションの方法

.NET Frameworkにガベージコレクションは搭載されています。C#で開発するプログラマーは特に意識せずともガベージコレクションが機能し、自動的に不要となったメモリ領域を解放してくれます。

また、明示的にガベージコレクションを明記することも可能です。
C#では、new演算子でオブジェクトを作成すると、メモリが確保されます。その際に最初に呼び出されるメソッドがコンストラクタになります。

それとは逆に、ガベージコレクション、つまりメモリを解放するタイミングで呼び出されるのがデストラクタです。
以下、コンストラクタとデストラクタの一例です。

~ + クラス名でデストラクタを呼び出すためのメソッドを定義できます。引数は設定できません。
しかし、コーディングはできますが、デストラクタを呼び出すタイミングは.NET Frameworkで管理されていますので、いつガベージコレクションが行われるかはわかりません。

PG
C#でメモリの解放を行うのはガベージコレクションだけなのでしょうか?
PL
そんなことはないですよ。メモリの解放を明示的にコーディングする場合は、Dispose()メソッドやUsingステートメントを使用することが多くなると思いますよ。

ガベージコレクションの登場でプログラミングの敷居が下がりました

メモリ管理を特に意識せずにプログラミングができることは、プログラミングの敷居が下がったといえます。しかし、プログラマーとして活躍するためには、メモリ管理の知識はとても重要です。ガベージコレクションが自動でメモリを解放してくれますが、メモリを意識したプログラミングをすることは強くおすすめします。


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

求人一覧

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)