紧急垃圾收集器

lua-users home
wiki

本页面是关于为 Lua 5.1.4 创建一个紧急垃圾收集器补丁。请注意,LuaFiveTwo 已将紧急垃圾收集器列为其包含的功能之一。此补丁的工作与可能包含在 LuaFiveTwo 中的紧急垃圾收集器是分开进行的。

紧急 GC 补丁使得在内存分配失败后安全地调用 Lua 垃圾收集器成为可能。这允许垃圾收集器释放一些内存,以便可以重试失败的分配。该补丁还增加了对设置 Lua 脚本可以分配的内存量的限制的支持。

文件

[下载紧急 GC 补丁(针对 5.1.4 版本 6)]

[用于压力测试紧急垃圾回收的程序。]

额外的内存优化功能。

这些功能已包含在紧急 GC 补丁中。它们可以在没有紧急 GC 补丁的情况下使用。

关于 Lua 垃圾收集器如何工作的说明

免责声明:这是我第一次接触垃圾收集器,因此其中一些内容可能不正确。欢迎进行更正/清理。--RobertGabrielJakabosky

“在进行此补丁的工作时,我不得不学习 Lua 的垃圾收集器是如何工作的。我写下这些是为了以后如果我需要修复收集器中的更多错误时能有所帮助,并且我希望这些信息也能帮助其他对 Lua 垃圾收集器工作原理感兴趣的人。” --RobertGabrielJakabosky

简单描述

Lua 垃圾收集器是一个标记-清除收集器。收集器在其每个收集周期中运行两个主要阶段:标记和清除。在标记阶段,收集器遍历 Lua 堆栈并进入表以标记找到的活动值。接下来,清除阶段将遍历所有可收集值的列表,并释放找到的所有死值。

详细描述

所有可收集类型的对象都有一个“marked”位字段。这些位定义如下(摘自头文件“lgc.h”)垃圾收集器跟踪当前白色(类型 0 或 1),具有另一种白色的对象是死对象,可以在清除状态下被收集。

对象的颜色由前 3 位(0、1、2)的哪些位被设置来定义

垃圾收集器状态(每个收集周期按此顺序通过这些状态)

--RobertGabrielJakabosky

另请参阅


RecentChanges · preferences
编辑 · 历史
最后编辑于 2010 年 12 月 8 日上午 1:05 GMT (差异)