Ruby 2.4.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

目次

特異メソッド
count disable enable latest_gc_info start stat stress stress=
インスタンスメソッド
garbage_collect
定数
INTERNAL_CONSTANTS OPTS

特異メソッド

count -> Integer[permalink][rdoc]

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

disable -> bool[permalink][rdoc]

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

前回の禁止状態を返します(禁止されていたなら true, GC が有効であったなら、 false)。

[SEE_ALSO] GC.enable

enable -> bool[permalink][rdoc]

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

前回の禁止状態を返します(禁止されていたなら true, GC が有効であったなら、 false)。

[SEE_ALSO] GC.disable

latest_gc_info(result_hash = {}) -> Hash[permalink][rdoc]
latest_gc_info(key) -> object

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

[PARAM] result_hash:
戻り値のためのハッシュを指定します。省略した場合は新 しくハッシュを作成します。result_hash の内容は上書き されます。
[PARAM] key:
得られる情報から特定の情報を取得したい場合にキーを Symbol で指定します。
start(full_mark: true, immediate_sweep: true) -> nil[permalink][rdoc]

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

GC#garbage_collectObjectSpace.#garbage_collect と同じ働きをします。 GC.disable により GC が禁止されている場合は何もしません。

nil を返します。

[PARAM] full_mark:
マイナー GC を動作させる場合は false を、そうでない場 合は true を指定します。
[PARAM] immediate_sweep:
sweep を遅らせる(Lazy Sweep を行う)場合は false を、そうでない場合は true を指定します。

注意: これらのキーワード引数は Ruby の実装やバージョンによって異なりま す。将来のバージョンとの互換性も保証されません。また、Ruby の実装がサポー トしていない場合はキーワード引数を指定しても無視される可能性があります。

stat(result_hash = {}) -> {Symbol => Integer}[permalink][rdoc]
stat(key) -> Numeric

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

[PARAM] result_hash:
戻り値のためのハッシュを指定します。省略した場合は新 しくハッシュを作成します。result_hash の内容は上書き されます。
[PARAM] key:
得られる統計情報から特定の情報を取得したい場合にキーを Symbol で指定します。
[RETURN]
GC 内部の統計情報をHash で返します。 引数 key を指定した場合は数値を返します。
GC.stat
# =>
 {
   :count=>0,
   :heap_allocated_pages=>24,
   :heap_sorted_length=>24,
   :heap_allocatable_pages=>0,
   :heap_available_slots=>9783,
   :heap_live_slots=>7713,
   :heap_free_slots=>2070,
   :heap_final_slots=>0,
   :heap_marked_slots=>0,
   :heap_swept_slots=>0,
   :heap_eden_pages=>24,
   :heap_tomb_pages=>0,
   :total_allocated_pages=>24,
   :total_freed_pages=>0,
   :total_allocated_objects=>7796,
   :total_freed_objects=>83,
   :malloc_increase_bytes=>2389312,
   :malloc_increase_bytes_limit=>16777216,
   :minor_gc_count=>0,
   :major_gc_count=>0,
   :remembered_wb_unprotected_objects=>0,
   :remembered_wb_unprotected_objects_limit=>0,
   :old_objects=>0,
   :old_objects_limit=>0,
   :oldmalloc_increase_bytes=>2389760,
   :oldmalloc_increase_bytes_limit=>16777216
 }

戻り値のハッシュは処理系に依存します。これは将来変更になるかもしれません。

本メソッドは C Ruby 以外では動作しません。

stress -> bool[permalink][rdoc]
stress=(value)

GC.stress が真に設定されている間は、GC を行えるすべての機会に GC を行います。

[PARAM] value:
任意のオブジェクト。真偽値として解釈されます。

インスタンスメソッド

garbage_collect -> nil[permalink][rdoc]

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

GC.startObjectSpace.#garbage_collect と同じ働きをします。 GC.disable により GC が禁止されている場合は何もしません。

nil を返します。

定数

INTERNAL_CONSTANTS -> {Symbol => Integer}[permalink][rdoc]

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

GC::INTERNAL_CONSTANTS
# => {:RVALUE_SIZE=>40, :HEAP_PAGE_OBJ_LIMIT=>408, :HEAP_PAGE_BITMAP_SIZE=>56, :HEAP_PAGE_BITMAP_PLANES=>4}
OPTS -> [String][permalink][rdoc]

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

可能性があるオプション文字列は以下の通りです。

例:

GC::OPTS # => ["USE_RGENGC", "RGENGC_ESTIMATE_OLDMALLOC", "GC_ENABLE_LAZY_SWEEP"]
# この場合、GCデバッグ機能やプロファイル機能は無効化されている