2011-06-25 322 views
0

他のメモリ集約型操作を実行する前に、ガベージコレクションオブジェクトをクリアするにはどうすればよいですか?または、メモリがいっぱいになると自動的に実行されますか?Pythonメモリの制限?限界に近づくとGCがクリアされますか?

Python(+ Eclipse)が2GB(Win32)でメモリ例外をスローするのはなぜ、実際にはまだメモリがWindowsでは使用されていないように見えるのですか?どこにでも限界がありますか?

+0

このような高いメモリ使用量が予想されるのですか、それともメモリリークですか?後者の場合、GCが役に立たない場合は、自分で漏れを見つけて修正する必要があります。 – delnan

+0

その場合は、すべてのデータを一度にロードするのではなく、ハードドライブ上の長いビットを参照するだけの高度な機能について考えることにします。 – Gerenuk

答えて

1

Windows 32bitアプリケーションでは、最大メモリが2GBに制限されています。ブートオプションは3Gbにバンプします。 64bit Windows/Pythonにアップグレードすることもできます。

+0

アップグレードはおそらく別のプロセッサを意味しますか? :)私は自宅でそれを持っていますが、仕事ではコンピュータは古く、予算は限られています。 – Gerenuk

1

gcモジュールを使用してガベージコレクタのパフォーマンスを調整することができます(たとえば、gc.set_threshold)。または、ごみを手動で収集することができます。gc.collect。しかし、私は、ほとんどの場合、オブジェクトはrefcountがゼロになるとすぐに収集されると信じています。

refnountが0にならないように循環参照がある場合、(thanks delnan!)ガベージコレクションは、それを明示するためにのみ問題になります。また

gcドキュメントからこのライン:

が漏れプログラム呼び出しgc.set_debug(gc.DEBUG_LEAK)をデバッグします。

+3

CPythonがガベージコレクタと呼ぶのは、循環参照用の単なるGCです。サイクルに入っていないすべてのオブジェクトは、到達不能になるとすぐに参照カウントによって処理されます。もちろん、彼らは到達不能になり、もはや必要としない参照を保持していません。 – delnan

関連する問題