このドキュメンテーションは、MicroPython の最新開発ブランチのためのものです。 リリースバージョンでは利用できない機能に言及することがあります。

特定のリリースのドキュメントをお探しの場合は、左側のドロップダウンメニューを使って、 望みのバージョンを選択します。

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