English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Lua は自動メモリ管理を採用しています。これは、新しく作成されたオブジェクトが必要なメモリの割り当て方法や、オブジェクトが使用されなくなった後にそのメモリを解放する方法を心配しなくても良いことを意味します。
Lua がゴミ収集器を収集するために死オブジェクト (Lua ではアクセスできない可能性のあるオブジェクト)を使用して、自動メモリ管理を行います。Lua で使用されるすべてのメモリ、例えば:文字列、テーブル、ユーザーデータ、関数、スレッド、内部構造などは、自動管理に従います。
Lua 実装のインクリメンタルマーク-スキャン収集器。この数字を使って、ゴミ収集ループを制御します:ゴミ収集器の間歇率とゴミ収集器のステップ倍率。この2つの数字はすべてパーセントで単位を取ります(例えば:値 100 は内部で 1 )
ゴミ収集器の間歇率は、収集器が新しいループを開始する前に待つ必要がある時間を制御します。この値を大きくすると、収集器の積極性を減少させます。この値が 100 に設定すると、収集器は新しいループを開始する前に待機しません。この値を設定する場合は 200 に設定すると、収集器は総メモリ使用量が前の2倍に達するまで新しいループを開始しません。
ゴミ収集器のステップ倍率は、収集器の動作速度がメモリ割り当て速度に対する倍率を制御します。この値を大きくすると、収集器はより積極的になり、各増分ステップの長さも増えます。この値を小さくすることは推奨されません。 100 、その場合、収集器は非常に遅く動作し、ループを完了するのに永远に時間がかかります。デフォルトの値は 200 、これは収集器がメモリ割り当ての「2倍」の速さで動作することを意味します。
もし、ステップ倍率を非常に大きな数字(プログラムが使用する可能性のあるバイト数よりも大きい)に設定すると 10%)、収集器の動作は stop に似ています-the-world 收集器。次に、間歇率を以下のように設定すると 200 、収集器の動作は過去の Lua 版本と同じです: Lua が使用するメモリが倍に増えるたびに、完全な収集を行います。
Lua が以下の関数を提供していますcollectgarbage ([opt [, arg]])自動メモリ管理を制御するために使用されます:
collectgarbage("collect"): 完全なゴミ収集サイクルを実行します。optパラメータは、異なる機能セットを提供します:
collectgarbage("count"): Luaが使用する合計メモリ数をKバイト単位で返します。この値には小数部分がありますので、それを 1024 Luaが使用する正確なバイト数を取得できます(オーバーフローを除く)。
collectgarbage("restart"): ゴミ収集器の自動実行を再起動します。
collectgarbage("setpause"): argを収集器の間歇率に設定します。前の間歇率を返します。
collectgarbage("setstepmul"): 前のステップ倍率を返します。
collectgarbage("step"): ゴミ収集器を一歩ずつ実行します。arg によって「サイズ」のステップが制御されます。0を入力すると、収集器は一歩進みます(分割できない)。非0の値を入力すると、収集器はLuaがこれらの多くの(Kバイト)メモリを割り当てる作業を収集します。収集器がループを終了するとtrueが返されます。
collectgarbage("stop"): ゴミ収集器の実行を停止します。再起動前の呼び出しの前に、収集器は明示的な呼び出しのみで動作します。
以下にシンプルなゴミ収集の例を示します:
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