Latest web development tutorials

Luaのガベージコレクション

Luaは自動メモリー管理を使用しています。 これは、メモリを割り当てる方法を新しく作成されたオブジェクトアウトを心配する必要はありませんことを、彼らはオブジェクトが使用されなくなった後に占有しないメモリを解放する方法を検討していないことを意味します。

Luaは自動メモリ管理を実行する(つまり、オブジェクトはLuaの中でアクセスすることはできません)すべての死者のオブジェクトを収集するためにガベージコレクタを実行しています。 Luaのは、など、すべてのメモリに使用されている:などの文字列、テーブル、ユーザーデータ、関数、スレッド、内部構造、自動管理の対象となっています。

スキャンコレクタ - Luaはインクリメンタルマークを実装しています。 ガーベジコレクタのガベージコレクションレートと断続的なステッピング倍率:それは、ガベージコレクションサイクルを制御するために2つの数値を使用しています。 どちらの図も、(:内部表現1における100の値など)単位の割合を使用しています。

ガベージコレクションは、断続的に速度が長く待つように新しいサイクルを開く前に収集する必要が制御します。 この値を大きくすると、コレクタの熱意を削減します。 この値は、新しいサイクルを開く前に、コレクターが待機する必要はありません100、未満の場合。 200にこの値を設定して合計2回のメモリ使用量が新しいサイクルの開始前に到達するまで、コレクターが待機できるようになります。

ガベージコレクタステッパ倍率がメモリ割り当て速度比に対するコレクタの相対動作速度を制御します。 これは、より積極的なコレクターの価値を高めるだけでなく、各インクリメンタルステップの長さを増加することはありません。 コレクタはそう常にループを行うことがそんなに遅い動作するので、もし、100未満であると、この値を設定しないでください。 デフォルト値は、「二重」速度作業のコレクタへのメモリ割り当てていることを意味し、200です。

あなたは非常に大きな数に倍率をステップした場合、コレクタは停止世界のコレクターのように動作します(プログラムで使用することができるよりも、バイトの数も10%大きくなっています)。 あなたが断続的に200に設定されたレート、コレクタの動作と同じのLuaのバージョンを過ぎを置けば次に:ルアが使用する各メモリは、完全なコレクションを行うには、倍増しました。


ガベージコレクタ機能

Luaは、以下の機能のcollectgarbage([OPT [、引数]提供])を自動メモリ管理を制御するために使用されます。

  • collectgarbage(「コレクト」):フルガベージコレクションサイクルを実行します。機能の異なるセットを提供するパラメータOPT:

  • collectgarbage(「カウント」):KのLUAが使用するメモリのバイト数合計数を返します。この値は、小数部分を持って、私たちは、あなただけのLUA(オーバーランしない限り)で使用される正確なバイト数を取得することができます1024を乗算する必要があります。

  • collectgarbage(「再起動」):再起動ガベージコレクタが自動的に実行されます。

  • collectgarbage(「setpause "):引数集断続的な速度を設定します(; 2.5宗派を参照してください)。断続的な速度の前の値に戻ります。

  • collectgarbage(「setstepmulは"):ステップ倍率の前の値を返します。

  • collectgarbage(「ステップ」):ワンステップは、ガベージコレクタを実行します。argの制御によりステップ "サイズ"。 0着信コレクタステッパー(不可分)ステップ。 着信ゼロ以外の値は、コレクタは、メモリの仕事のこれらの複数の(Kバイト)の等価Luaの割り当てを収集します。 サイクルのコレクタ側は、trueを返します場合。

  • collectgarbage(「停止」):ガベージコレクタの実行を停止します。再起動を呼び出す前に、唯一の理由の明示的な呼び出しのコレクタが実行します。

以下は、単純なガベージコレクションの例を示します。

mytable = {"apple", "orange", "banana"}

print(collectgarbage("count"))

mytable = nil

print(collectgarbage("count"))

print(collectgarbage("collect"))

print(collectgarbage("count"))

上記のプログラムは以下のように、出力結果は、(メモリ使用量の変化に注意してください)、次のとおりです。

20.9560546875
20.9853515625
0
19.4111328125