Go to the first, previous, next, last section, table of contents.

ガベージコレクション

(それがリストであれ、ストリングであれ、バッファ等であれ)新しく構造(体)を作る全 ての関数はそれらの構造(体)用のストレージ領域を必要とします。ストレージはある期 間だけ用いられ、その後開放(訳注:release)される (e.q., バッファを kill した り、オブジェクトに対する最後のポインタを削除する)ことが非常に一般的であるた め、この放棄されたストレージを回収/再生する(訳注:reclaim) ガベージコレクタ(訳 注: Garbage Collector)が提供されています。

ガベージコレクタは、ユーザーからアクセスすることのできる全てのオブジェクト (e.g., 全てのシンボル、その値と対応する関数定義、現在スタック上に存在するデー タ) をスキャンし、"用いられているものである" とそれらをマークすることで処理を 行ないます。 (これらを通し)アクセス可能なオブジェクトも(全て) "用いられている" とマークされるため、残りのものは全てゴミ(訳注:garbage) でなくてはいけないこと になります。

用いられてないコンスセルは、(将来の)アロケーション用にフリーリストに(そのまま) 繋げられます。ストリングはまず "compacted" され、用いられてないストリングの領 域がストリング作成用の関数で用いられるようにします。

--------

CN: 他の Lisp と異なり、ストレージが尽きた場合にガベージコレクタは呼ばれませ ん。そのかわり、GNU Emacs Lisp は (ただ単に) OS にもっと多くの領域をアロケート するよう要求し、gc-cons-threshold バイト使われるまで処理を続けます。

--------

Command: garbage-collect

この関数は、 Lisp オブジェクトで用いられ、もう必要とされていない領域を回収 します。これは用いられている領域の量に関する情報を返します。ガベージコレク ションは前にガベージコレクションが行なわれてから、 gc-cons-threshold バイ ト以上 Lisp データが用られた場合、自動的に行なわれます。

この関数は以下の情報を含むリストを返します。

  ((used-conses . free-conses)
   (used-syms . free-syms)
   (used-markers . free-markers)
   used-string-chars used-vector-slots)
  (garbage-collect)
  => ((3435 . 2332) (1688 . 0) (57 . 417) 24510 3839)

User Option: gc-cons-threshold

この変数の値は、ガベージコレクションが行なわれた後、次のガベージコレクショ ンが自動的に呼ばれるまでに用いることのできるストレージのバイト数です。スト レージはコンスする(コンスセルは 8 バイト)、ストリングを作る(1 文字当り 1 バイト足す数バイトのオーバーヘッド)、テキストをバッファに追加する、等々で 用いられます。

この変数はガベージコレクションの回数を減らすため 100,000 以上の値に設定さ れることもあります。これを 100,000 以下の値に設定しても、次のガベージコレ クションまでしか効果はありません。(次の)ガベージコレクション時に garbage- collect はこれを 100,000 に戻します。(??)


Go to the first, previous, next, last section, table of contents.