ガベージコレクション(GC)とは、プログラミング言語が自動的にメモリ管理を行う仕組みのことです。特に、使用されなくなったメモリ領域を自動的に解放し、プログラムのメモリ使用量を最適化するために利用されます。これにより、開発者はメモリ管理に関する負担を軽減し、メモリリーク(使用していないメモリが解放されない状態)を防ぐことができます。
以下は、ガベージコレクションの基本的な流れです。
以下のサンプルコードでは、ガベージコレクションの基本的な動作を示します。このコードでは、オブジェクトを生成し、その参照を削除することで、ガベージコレクションがどのように機能するかを確認します。
import gc
class SampleObject:
def __init__(self, name):
self.name = name
print(f"{self.name} created.")
def __del__(self):
print(f"{self.name} deleted.")
def create_objects():
obj1 = SampleObject("Object 1")
obj2 = SampleObject("Object 2")
# obj1とobj2はここで参照されているため、ガベージコレクションは実行されない
print("Objects created. Now going out of scope...")
# オブジェクトを作成
create_objects()
# ここでobj1とobj2はスコープを出て参照がなくなる
print("Forcing garbage collection...")
gc.collect() # ガベージコレクションを強制的に実行
クラス定義: SampleObject
クラスを定義し、コンストラクタとデストラクタを実装します。デストラクタはオブジェクトが削除されるときに呼び出され、メッセージを表示します。
オブジェクトの生成: create_objects
関数で、2つのSampleObject
インスタンスを生成します。この時点では、両方のオブジェクトはまだ参照されています。
スコープの終了: create_objects
関数が終了すると、obj1
とobj2
への参照が失われます。
ガベージコレクションの強制実行: gc.collect()
を呼び出すことで、Pythonのガベージコレクタを強制的に実行します。このタイミングで、参照がなくなったオブジェクトが解放され、デストラクタが呼び出されます。
このサンプルコードを実行すると、オブジェクトが作成され、スコープを出た後にガベージコレクションが実行される様子が確認できるでしょう。
次のセクションでは、ガベージコレクションとリファレンスカウントの違いについて詳しく説明します。