2020/05/19

R - 研究編 5 メモリ管理に関する関数

R のメモリ管理に関する関数をまとめて紹介します。

object.size(x)

オブジェクト x のサイズを object_size クラスで返します。実体はバイト数を表す整数です。
別の記事で紹介した pkginfo() でも使用しています。
object_size クラス用の print() のオーバーライドがあり、units 属性で単位を指定できます。units に指定できる値は、"b", "Kb", "Mb", "Gb", "B", "KB", "MB", "GB", "auto" です。

gc(verbose=getOption("verbose"), reset=FALSE)

ガーベジコレクションを実行します。verbose を TRUE にすると、cons cell, vector の各領域についての統計情報を出力します。reset を TRUE にすると、メモリの最大使用量をリセットします。

gcinfo(verbose)

verbose を TRUE にして実行すると、以後ガーベジコレクションが実行される度に統計情報を出力するようになります。FALSE にすれば出力されなくなります。

gctorture(on=TRUE)

on を TRUE にして実行すると、以後メモリを確保しようとする度にガーベジコレクションを実行するようになります。超遅くなります。

gctorture2(step, wait=step, inhibit_release=FALSE)

step 回メモリ確保を行う度にガーベジコレクションを実行するように設定します。wait を指定すると、その回数分メモリ確保が行われるまでガーベジコレクションの強制実行を開始するのを待ちます。
inhibit_release を TRUE にすると、メモリを解放せず、再利用に備えるようになります。

memory.size(max=FALSE)

Windows 専用です。現在の使用メモリ量を取得します (max=FALSE)。max を TRUE にすると、OS から報告される割り当て済の最大メモリ量になります。max を NA にすると、メモリ上限量になります。

memory.limit(size=NA)

Windows 専用です。メモリ上限量を取得します (size=NA)。size に数値を指定すると、その値を MB として解釈し、メモリ上限量を変更します。

memory.profile()

cons cell の使用状況を SEXPREC のタイプごとに取得します。

Rprofmem(filename="Rprofmem.out", append=FALSE, threshold=0)

filename で指定されたファイルにメモリ割り当て状況を出力します。NULL, 空文字列にすると出力されなくなります。append を TRUE にすると既存のファイルに追記します。
threshold に数値を指定すると、その値をバイト数として解釈し、そのサイズ以上のメモリ割り当てのみが記録されるようになります。

tracemem(x)

オブジェクト x を監視し、コピーが発生したときにその旨を表示するようにします。監視を特定する文字列を返します。

untracemem(x)

tracemem(x) によって設定したオブジェクト x の監視を外します。

retracemem(x, previous=NULL)

オブジェクト x の監視を行うにあたって、x を生成する元となっているオブジェクトとの紐付けを行います。previous には元となっているオブジェクトの監視特定文字列を指定します。
一般的には、tracemem(a); b <- foo(a); retracemem(b, retracemem(a)) のように使用します。