<一覧に戻る

ガベージコレクションとは何か

ガベージコレクション(GC)とは、プログラミング言語が自動的にメモリ管理を行う仕組みのことです。特に、使用されなくなったメモリ領域を自動的に解放し、プログラムのメモリ使用量を最適化するために利用されます。これにより、開発者はメモリ管理に関する負担を軽減し、メモリリーク(使用していないメモリが解放されない状態)を防ぐことができます。

ガベージコレクションの基本概念

以下は、ガベージコレクションの基本的な流れです。

  1. オブジェクトの生成: プログラム内で新しいオブジェクトが生成されると、そのオブジェクトはメモリの特定の領域に配置されます。
  2. リファレンスの管理: オブジェクトへの参照が存在する限り、そのオブジェクトは「生きている」とみなされます。
  3. ガベージコレクションの実行: 参照がなくなったオブジェクトが検出されると、ガベージコレクションが実行され、そのオブジェクトが占有していたメモリを解放します。

サンプルコード

以下のサンプルコードでは、ガベージコレクションの基本的な動作を示します。このコードでは、オブジェクトを生成し、その参照を削除することで、ガベージコレクションがどのように機能するかを確認します。

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()  # ガベージコレクションを強制的に実行

コード解説

  1. クラス定義: SampleObjectクラスを定義し、コンストラクタとデストラクタを実装します。デストラクタはオブジェクトが削除されるときに呼び出され、メッセージを表示します。

  2. オブジェクトの生成: create_objects関数で、2つのSampleObjectインスタンスを生成します。この時点では、両方のオブジェクトはまだ参照されています。

  3. スコープの終了: create_objects関数が終了すると、obj1obj2への参照が失われます。

  4. ガベージコレクションの強制実行: gc.collect()を呼び出すことで、Pythonのガベージコレクタを強制的に実行します。このタイミングで、参照がなくなったオブジェクトが解放され、デストラクタが呼び出されます。

このサンプルコードを実行すると、オブジェクトが作成され、スコープを出た後にガベージコレクションが実行される様子が確認できるでしょう。

次のセクションでは、ガベージコレクションとリファレンスカウントの違いについて詳しく説明します。

一覧に戻る

出力結果: