版本说明:本文档涉及早期版本的 Lua。增量垃圾回收自 Lua 5.1 开始可用。
早期版本的 Lua(5.1 之前)不太适合实时程序的 [主循环]。原因不是 Lua 慢——事实上,它可能是所有脚本语言中虚拟机速度最快的。问题在于标记-清除垃圾回收(GC),它需要占用与分配对象数量成比例的集中 CPU 时间。在 5.1 中,用一个实时增量系统替换标记-清除收集器是有用的(参见论文《Real-Time Non-Copying Garbage Collection》[1])。在早期版本的 Lua 中,仍然有几种方法可以在实时程序中好好利用 Lua。
- 仅在初始化时使用 Lua。 使用 Lua 脚本初始化 C 结构,然后关闭或停止使用 Lua 上下文。
- 在主循环中使用 Lua,但不要分配对象。 通过谨慎的编程,可以在主循环中消除对象分配,这样 GC 就不需要运行。
- 保持分配的对象数量较少,并在主循环的每次迭代后运行 GC。 对于少量对象,这可能是合理的。请注意,标准库也包含在此计数中,因此最好删除未使用的函数。
另请参阅:优化技巧,垃圾回收/实时游戏中的垃圾回收,Lua 代码性能分析
RecentChanges · preferences
编辑 · 历史
最后编辑于 2008 年 10 月 25 日上午 10:53 GMT (差异)