Pythonのガベージコレクターインターフェイス(gcモジュール)の使い方
Pythonのガベージコレクションとは
自動ガベージコレクションは、Pythonの重要な機能のひとつです。ガベージコレクターの仕組みは、プログラム内で使用されなくなったオブジェクトが占有しているメモリを自動的に検出し、解放することでメモリを効率的に管理します。
参照カウント方式によるメモリ管理
Pythonは参照カウント(reference counting)方式を採用してガベージコレクションを行っています。Pythonインタープリタは、各オブジェクトが他のオブジェクトから参照された回数を常に記録しています。
オブジェクトへの参照が削除されるたびにカウントは減少し、参照カウントがゼロになると、そのオブジェクトは不要と判断され、メモリが直ちに回収されます。
通常、この処理は自動的に実行されますが、プログラムの特定の状況に応じて、開発者が意図的にガベージコレクションを制御することも可能です。そのためのインターフェイスを提供するのが標準ライブラリの「gc」モジュールです。
gcモジュールの主な関数一覧
| 関数・属性 | 説明 |
| enable() | 自動ガベージコレクションを有効にします。 |
| disable() | 自動ガベージコレクションを無効にします。 |
| isenabled() | 自動コレクションが有効になっている場合はTrueを返します。 |
| collect() | 引数なしで呼び出すとフルコレクションを実行します。オプションの整数引数で収集対象の世代(0〜2)を指定でき、無効な世代番号を渡すとValueErrorが発生します。戻り値として、検出された到達不能オブジェクトの数が返されます。 |
| set_threshold() | ガベージコレクションのしきい値(コレクションの実行頻度)を設定します。 |
| get_threshold() | 現在設定されているコレクションのしきい値をタプルとして返します。 |
| callbacks | コレクションの実行前後にガベージコレクターから呼び出されるコールバック関数のリストです。 |
-
Pythonの低レベルネットワークインターフェース(ソケット)の基礎と使い方
Pythonの標準ライブラリに含まれる「socket」モジュールは、OSが提供するソケットエンドポイントを利用して、サーバーマシンとクライアントマシンが通信するための仕組みを定義しています。socket APIには、コネクション型(接続指向)プロトコルとコネクションレス型(非接続型)プロトコルの両方に対応した関数が用意されています。 ソケットとは、双方向通信リンクの「終端(エンドポイント)」のことです。IPアドレスとポート番号によって識別され、通信を開始するには両端でソケットを適切に設定する必要があります。これにより、クライアント・サーバー環境において、着信メッセージを待ち受け、応答を送り返
-
ガベージコレクション入門(前編):Rubyのメモリ管理の仕組み
コードを実行するとき、必ずメモリを使用します。Rubyのような言語でプログラムを書いていると、使えるメモリは無限にあるように感じられます。コードを実行しているシステムが持つ有限のメモリ量を意識することなく、どんどん書き進められるからです。今回のRuby Magicでは、この便利な仕組みがどのように実現されているのかを解説します。 少しの歴史 かつて、Rubyのようなスクリプト言語はまだ存在していませんでした。人々はCのような低水準プログラミング言語だけでコードを書いていました。これらの言語が「低水準」と呼ばれる理由の一つは、メモリの後片付けを自分自身で行わなければならない点にあります。たとえば