版本说明: 本文涉及 Lua 的早期版本。增量式垃圾回收机制在 Lua 5.1 中可用。
Lua 的早期版本(早于 5.1)不适合实时程序的主循环。原因并非 Lua 速度慢——事实上,它可能是所有脚本语言中最快的虚拟机。问题在于标记-清除垃圾回收(GC),它需要与分配对象数量成正比的集中 CPU 时间。在 5.1 中,用实时增量系统(参见论文《实时非复制垃圾回收》[1])替换标记-清除收集器是有用的。在 Lua 的早期版本中,仍然有几种方法可以在实时程序中很好地使用 Lua。
- 仅在初始化时使用 Lua。使用 Lua 脚本初始化 C 结构,然后关闭或停止使用 Lua 上下文。
- 在主循环中使用 Lua,但不要分配对象。通过仔细编程,可以消除主循环中的对象分配,在这种情况下,GC 不需要运行。
- 保持分配对象的數量小,并在主循环的每次迭代后运行 GC。对于少量对象,这可能是合理的。请注意,标准库包含在此计数中,因此最好剥离未使用的函数。
另请参阅:优化技巧、垃圾回收/实时游戏中的垃圾回收、Lua 代码性能分析
最近更改 · 偏好设置
编辑 · 历史记录
最后编辑于 2008 年 10 月 25 日下午 4:53 GMT (差异)