实时游戏中的垃圾回收

lua-users home
wiki

关于垃圾回收在实时游戏中的一些笔记,特别是与Lua相关的。请修正、扩展和更新这些笔记。 -- ThatcherUlrich

版本通知:Lua 5.1 已经实现了增量 GC,因此其中许多观点可能仅具有历史意义。

为了保持低延迟操作,必须允许垃圾收集器定期执行少量工作。对于游戏来说,这意味着游戏循环应该每帧调用一次垃圾收集器。这比文献中通常讨论的粒度要粗糙得多,文献中的讨论通常侧重于多处理器算法。不过,Johnstone 的论文明确解决了单处理器的情况。
写屏障非常简单;根据具体的算法,有几种变化,但最终它只需要大约 5 到 10 行 C 代码和 10 到 20 条指令。

实现注意事项:最好是 Lua 实现 wherever 它向内部(表)指针写入时使用宏(也许它已经这样做了)。然后,一个附加的增量收集器可以将此宏定义为对写屏障的函数调用(或写屏障本身的内联代码)。


RecentChanges · preferences
编辑 · 历史
最后编辑于 2009年3月16日 早上7:14 GMT (差异)