Ruby 3.0 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > GCモジュール

module GC

クラス・モジュールの継承リスト: GC

要約

GC は Ruby インタプリタの「ゴミ集め(Garbage Collection)」を制御するモジュールです。

GCのチューニングについて

Ruby 2.1ではRGenGCと呼ばれる新たなGCメカニズムが導入されました。それにともない、以下の環境変数が導入され、これらを設定することでGCの動作をチューニングすることができます。これらの環境変数の効果はRubyの起動時のみ有効です(つまりrubyを動かしている途中で変更することはできません)。

チューニングのための環境変数

以下の2つの環境変数はobsoleteであり、新しいものを使うことが望ましい

RUBY_GC_HEAP_GROWTH_FACTOR と RUBY_GC_HEAP_FREE_SLOTS_GOAL_RATIO に関する補足説明

RUBY_GC_HEAP_GROWTH_FACTOR と RUBY_GC_HEAP_FREE_SLOTS_GOAL_RATIO はともに GC後に空きスロットが少ないときにどれだけの量のメモリを新たに確保するかを決めるパラメータである。この2つのパラメータの優先順位は以下の通りである。

当然、RUBY_GC_HEAP_GROWTH_MAX_SLOTS はこれらより優先度が高いことに注意。

malloc閾値についての説明

Rubyが利用するメモリはスロット以外にもある。例えば長い文字列は malloc によってCのヒープ上に確保される。GCはこのようなヒープ上のメモリを解放するためにも実行される。そこで、rubyでは malloc によるメモリ消費量を保持し、この消費量がある閾値を越えるとGCが起動される。また、GCが起動されるごとにこの消費量カウンタが0にリセットされる。

このカウンタは2種類あり、一方は malloc_increase_bytes、もう一方は oldmalloc_increase_bytes と呼ばれる。この2つの性質は以下のようになっている。

実行中のパラメータ

プログラム実行中には、GCに関する統計情報/閾値情報を GC.stat で見ることができるが、この文章で説明した以下の情報はこれで調べることができる。

チューニングについて

この設定を理解するための用語集

参考資料

@see ObjectSpace

特異メソッド

定義 説明
compact -> Hash

ヒープをコンパクションします。

count -> Integer

プロセス開始からガーベージコレクトを実行した回数を Integer で返します。

disable -> bool

ガーベージコレクトを禁止します。

enable -> bool

ガーベージコレクトを許可します。

latest_gc_info(result_hash = {}) -> Hash
latest_gc_info(key) -> object

最新のGCの情報を返します。

start(full_mark: true, immediate_sweep: true) -> nil

ガーベージコレクトを開始します。

stat(result_hash = {}) -> {Symbol => Integer}
stat(key) -> Numeric

GC 内部の統計情報を Hash で返します。

stress -> bool

GCがストレスモードかどうかを返します。

stress=(value)

GCのストレスモードを引数 value に設定します。引数 value が真に設定されている間は、GC を行えるすべての機会に GC を行います。

verify_compaction_references(toward: nil, double_heap: nil) -> Hash

コンパクションの参照の一貫性を検証します。

インスタンスメソッド

定義 説明
garbage_collect(full_mark: true, immediate_sweep: true) -> nil

ガーベージコレクトを開始します。

定数

定義 説明
INTERNAL_CONSTANTS -> {Symbol => Integer}

GC用内部定数の値を保持するハッシュテーブルです。

OPTS -> [String]

コンパイル時に指定したGCのオプションです。