タグ

pythonとGCに関するsyanbiのブックマーク (4)

  • __del__, gc, 循環参照, weakref

    2010年11月22日公開 Python の __del__ メソッド、ガベージコレクタ、循環参照、そして弱参照についての解説と考察。 参照カウンタ __del__ __del__ の落とし穴 循環参照 __del__ の落とし穴 考察 __del__ を使わない 循環参照を確実に避けることはできる? 弱参照 weakref モジュールを利用したハック いったいいつ __del__ を使うのか 参考文献 事項 参照カウンタ C/C++ では、malloc を使って確保したメモリや new で作成したオブジェクトについては、必ず対応する free / delete を呼ばなければならない。これを忘れるといつまでも解放されないメモリがプログラムの生存期間中居残ることになる。これをメモリリークと呼ぶ。メモリリークがあると、確保されたままになったメモリが OS や他のプロセスを圧迫して、システム全

    syanbi
    syanbi 2012/03/11
    弱参照に関する実装なんだっけ(python)って思って検索したら出てきたのでブクマ。__del__ 利用時の循環参照オブジェクトはメモリ開放しないという罠とか今把握してないのが掲載されてっぞ・・・
  • 【お詫びして訂正】Pythonの粗大ゴミ - atsuoishimoto's diary

    昨夜、Pythonの粗大ゴミというエントリを書いたが、このエントリを公開し、風呂に入ってさて寝ようとした時、ふと気になったことがあった。try-finally付きのジェネレータがgcで解放されないのなら、withブロックも一緒ではないだろうか? あの記事は昔ジェネレータでtry-finallyが使えるようになった時(そう、最初はジェネレータ内でtry-finallyを使うとコンパイルエラーだったのだ)、ふと気になって調べた記憶を元に書いた。あの頃はたぶんまだwith文が無かった頃なので、withブロック中での動きは把握していない。 で、調べてみると、やっぱりwithブロック中のジェネレータオブジェクトが循環参照に含まれていると、try-finallyの場合と同様に解放されない事がわかった。次のようなジェネレータ def uncollectable(arg): with context: y

    【お詫びして訂正】Pythonの粗大ゴミ - atsuoishimoto's diary
    syanbi
    syanbi 2011/02/28
    CPython GCについてのエントリ(他エントリの訂正にあたる)
  • Pythonのガベージコレクタは「マーク&スイープ」? - atsuoishimoto's diary

    昨日公開した Pythonのガベージコレクション にこんな突っ込みをいただいた。 マークアンドスイープGCじゃないそうです PythonのGarbageCollection http://www.narihiro.info/translate/garbage_collection_for_python_jp.html 確かに、Pythonで使用しているのは教科書で言うマーク&スイープとは異なるアルゴリズムである。上記のページにあるように、いわゆるマーク&スイープは、ルートオブジェクトと呼ばれる生きていることが確実なオブジェクトを見つけ出し、そこから参照されているオブジェクトをどんどん探り出して、最終的に誰からも参照されていないオブジェクトをあぶり出すというものだ。Pythonではルートからオブジェクトを探すというアプローチを取っておらず、私も会場の説明では「マークアンドスイープの一種」のよ

    Pythonのガベージコレクタは「マーク&スイープ」? - atsuoishimoto's diary
  • PythonのGCについて

    PythonのGarbageCollection 原文 Neil Schemenauer (翻訳:中村 成洋) ポータブルなGarbageCollection 概要 循環参照はリスト,タプル,インスタンス,クラス,辞書,関数に伴って見つかります. インスタンスの __del__ メソッドは正常に取り扱われます. 新しいタイプをGCの対象に追加するのは簡単です. このGCが有効なPythonは,通常のPythonとバイナリ互換です. 世代別GCが動いています(今は三世代).このオーバヘッドをpybenchで測ったら,大体4%くらい占めていました. 実質的に,すべての拡張モジュールは,不変に(私は,標準的な配布において 新しいものとcPickleを修正しなければなりませんでした)ならなければなりま せん.gcと呼ばれている新しいモジュールは,コレクターを調整して,デバッ ギングオプションをセッ

  • 1