gc -- ガベージコレクションの制御
このモジュールは、該当する CPython モジュールのサブセットを実装しています。
詳しくはオリジナルの CPython ドキュメンテーションを参照してください: gc.
関数
- gc.enable()
自動ガベージコレクションを有効にします。
- gc.disable()
自動ガベージコレクションを無効にします。無効にしてもヒープメモリの割り当ては可能であり、ガベージコレクションも
gc.collect()を使って手動で開始できます。
- gc.isenabled()
自動ガベージコレクションが有効になっている場合は True を返し、そうでない場合は False を返します。
- gc.collect()
ガベージコレクションを実行します。
- gc.mem_alloc()
Python コードによって割り当てられているヒープ RAM のバイト数を返します。
CPython との違い
この関数は、MicroPythonの拡張機能です。
- gc.mem_free()
Python 使用可能なコードが割り当てられるヒープ RAM のバイト数を返します。この量がわからない場合は -1 を返します。
CPython との違い
この関数は、MicroPythonの拡張機能です。
- gc.threshold([amount])
GC 割り当てしきい値を追加で設定または照会します。通常、ガベージコレクションは、新しい割り当てを満たすことができない場合、つまりメモリー不足(OOM: Out-Of-Memory)状態でのみトリガーされます。この関数が呼び出された場合は、OOMに加えて、 amount バイトが(以前に割り当てられているものと合計で)割り当てられた後にガベージコレクションがトリガーされます量は通常、ヒープが使い尽くされたときよりも早くガベージコレクションをトリガーすることが目的であり、全ヒープサイズよりも小さく指定します。また、早めのガベージコレクションによって過剰なメモリー断片化が防止されることを期待しています。これは、ヒューリスティックな尺度であり、その効果はアプリケーションごとに異なり、 amount パラメータの最適値も異なります。
引数なしで関数を呼び出すと、しきい値の現在の値が返されます。値が -1 の場合は無効な割り当てしきい値であることを意味します。
CPython との違い
この関数は、MicroPython の拡張機能です。CPython も同様の機能
set_threshold()を持っていますが、GCの実装が異なるため、シグネチャとセマンティクスが異なります。サンプルコード
合計 32768 バイトの RAM が割り当てられるたびにガベージコレクションをトリガーします:
gc.threshold(32768)
デフォルトの動作に戻し、メモリ不足の場合にのみガベージコレクションをトリガーします:
gc.threshold(-1)
サンプルコード
>>> import gc
>>> gc.mem_free() # メモリ内の空きバイト数を取得
8192
>>> gc.mem_alloc() # メモリに割り当てられたバイト数を取得
1024
>>> foo = bytearray(1000) # 大きなデータ配列を作成
>>> gc.mem_free() # 使用可能なメモリが減ったことを示す
7168
>>> gc.mem_alloc() # メモリ使用量が増えていることを示す
2048
>>> del foo # オブジェクトを削除
>>> gc.mem_free() # コレクションがまだ実行されていないことを示す
7168
>>> gc.mem_alloc() # そのメモリはまだ割り当てられている
2048
>>> gc.collect() # コレクションを手動で実行
>>> gc.mem_free() # 今、そのメモリを取り戻した
8192
>>> gc.mem_alloc() # そのメモリはもはや割り当てられてない
1024