ガベージ コレクション (C# と Java の比較)

更新 : 2007 年 11 月

C や C++ の多くのオブジェクトでは、宣言したらリソースを割り当て、安全に使用できるようにする必要があります。また、オブジェクトを使用した後は、リソースを空きメモリ プールに解放する必要もあります。リソースを解放しないと、リソースが次から次へと無駄に消費されるので、メモリ リークと呼ばれる問題がコードで発生します。逆に、リソースの解放が早すぎると、データの損失、他のメモリ領域の破損、null ポインタ例外などが発生する可能性があります。

Java と C# では共に、これらの問題を防ぐために、アプリケーションで使用中のすべてのオブジェクトの有効期間を個別に管理します。

Java では、JVM が、割り当てられたリソースへの参照を追跡して、未使用メモリの解放を管理します。リソースが有効な参照によって参照されなくなったことを JVM が検知すると、リソースのガベージ コレクションが行われます。

C# の場合、ガベージ コレクションは、JVM と同じ機能を持つ共通言語ランタイム (CLR) によって処理されます。CLR のガベージ コレクタは、メモリ ヒープに未参照のオブジェクトが存在しないかどうかを定期的にチェックし、そのようなオブジェクトによってリソースが保持されている場合は解放します。

参照

概念

C# プログラミング ガイド

自動メモリ管理

その他の技術情報

Java 開発者のための C# コード例