Pythonメモリ管理
1345 ワード
原文リンク:Pythonメモリ管理メカニズム及び最適化の概要
Pythonには2つのメモリ管理メカニズムが共存しています.参照数:オブジェクトの参照が0の場合、オブジェクトは削除されます(ただし、ループ参照は処理できません) .ごみ回収: Pythonでは、他のオブジェクトを参照できるすべてのオブジェクトをコンテナ(container)と呼ぶ.従って、循環参照は容器間のみで形成することができる.Pythonのゴミ回収メカニズムはこの特徴を利用して解放される対象を探している.すべてのコンテナオブジェクトを記録するために、Pythonは各コンテナを双方向チェーンテーブルにチェーンする.双方向チェーンテーブルを使用するのは、コンテナセットにオブジェクトを迅速に挿入および削除するためである.すべてのコンテナオブジェクトを維持する双方向チェーンテーブルがあれば、Pythonはゴミ回収時に次の手順で解放するオブジェクトを探します.は、容器オブジェクト毎に 各コンテナオブジェクトについて、参照対象オブジェクトの のステップ2の実行後、 は、ステップ3で解放することができないオブジェクトである、あるオブジェクトを参照している場合には、参照されたオブジェクトも解放することができないので、これらのオブジェクトも別のセットに入れる. このときの残りのオブジェクトはいずれも到達できないオブジェクトである.これらのオブジェクトを解放することができます.
Pythonオブジェクトが
Pythonには2つのメモリ管理メカニズムが共存しています.
gc_refs
の値を設定、そのオブジェクトの参照カウント値に初期化する.gc_refs
の値を1だけ減少するすべての参照対象オブジェクトが見つかる.gc_refs
の値が0より大きいオブジェクトはすべて非容器オブジェクトによって参照され、少なくとも1つの非循環参照が存在する.そのため、これらのオブジェクトを解放する、別の集合に入れることはできない.Pythonオブジェクトが
__del__
この方法では、Pythonのゴミ回収メカニズムは、その対象が到着できないことを発見しても彼を解放しない.理由は__del__
この方式は、Pythonオブジェクトの参照カウントが0で削除される前にクリーンアップ作業のために呼び出す.ごみ回収で見つかった解放が必要なオブジェクトには循環参照が存在することが多いため、循環参照のオブジェクトaとbについて、どのオブジェクトの__del__
は決定できないため、Pythonのゴミ回収メカニズムはこれらのオブジェクトを解放することを放棄し、これらのオブジェクトを保存し、gcを通過する.garbageという変数にアクセスします.プログラマーはgc.garbage
手動でオブジェクトを解放しますが、コードで定義しないほうがいいです.__del__
という方法です