緊急垃圾收集器

lua-users home
wiki

此頁面是關於為 Lua 5.1.4 製作緊急垃圾收集器補丁的說明。請注意 LuaFiveTwo 已將緊急垃圾收集器列為其中一項會納入的功能。針對此補丁所做的工作與 LuaFiveTwo 中可能納入的緊急垃圾收集器是分開進行的。

緊急 GC 補丁讓您可以在記憶體配置失敗後安全呼叫 Lua 垃圾收集器。這允許垃圾收集器釋放一些記憶體,以便重試失敗的配置。此補丁還增加了設定 Lua 指令碼可配置多少記憶體的限制支援。

檔案

[下載 (5.1.4) 第 6 版緊急 GC 補丁]

[執行緊急垃圾收集的壓力測試程式。]

額外的記憶體最佳化功能。

這些包含在緊急 GC 補丁中。這些可以用於沒有緊急 GC 補丁的情況。

有關 Lua 垃圾收集器運作原理的注意事項

免責聲明:這是我的第一個垃圾收集器開發專案,因此其中一些資訊可能會不正確。歡迎提供修正/修正建議。 --RobertGabrielJakabosky

「在開發此補丁的過程中,我必須了解 Lua 中的垃圾收集器如何運作。我寫下這些內容,以便在日後需要修正收集器的更多錯誤時幫助我,並且我希望這些資訊可以幫助其他對 Lua 垃圾收集器運作原理有興趣的人。」 --RobertGabrielJakabosky

簡要說明

Lua 垃圾收集器是一個標記和清除收集器。收集器有標記和清除這兩個主要階段,會在每個收集週期執行。在標記階段,收集器會遍歷 Lua 堆疊並進入表格中,將它找到的值標記為活資料。接著,清除階段會檢閱已收集值清單,並釋放它找到的所有死資料。

詳細說明

所有可收集類型物件具有「marked」位元欄位,其定義如下(摘自標頭檔「lgc.h」):垃圾收集器會追蹤目前的白色(類型 0 或 1)以及具有另一白色且可以於掃描狀態收集的死物件。

物件的顏色由設定的前 3 個位(0、1、2)決定。

垃圾收集器狀態(每個收集週期依此順序通過這些狀態)

--RobertGabrielJakabosky

請參閱


近期變更 · 偏好設定
編輯 · 歷史記錄
上次編輯於 2010 年 12 月 8 日 上午 7:05 (GMT) (比較差異)