紧急垃圾收集器

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 堆栈并进入表,将找到的值标记为活动。接下来,清除阶段将遍历所有可收集值的列表,并释放所有找到的死值。

详细描述

所有可收集类型的对象都有一个“标记”位域。这些位定义如下(从头文件“lgc.h”中复制) 垃圾收集器跟踪当前白色(类型 0 或 1),而具有其他白色的对象是死对象,可以在扫描状态期间被收集。

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

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

--RobertGabrielJakabosky

另请参阅


最近更改 · 偏好设置
编辑 · 历史记录
最后编辑于 2010 年 12 月 8 日上午 7:05 GMT (差异)