garbage-collection - Lua 的 GC 和实时游戏

标签 garbage-collection lua real-time

据我所知,跟踪 GC 无法避免完全 GC 期间的线程阻塞。

我用过 XNA+C#,GC 时间无法消除。所以我切换到低级语言 C,但我意识到我需要脚本语言。我正在考虑Lua,但我担心Lua的GC机制。 Lua 正在使用增量跟踪 GC,线程阻塞也应该如此。

那么我应该如何在实时游戏中处理这个问题呢?

最佳答案

Lua 的强大之处在于它不会妨碍你。想上课?这可以用元表构建。想要沙盒吗?使用 lua_setfenv .

至于垃圾收集器。首先按原样使用它。如果以后发现性能问题,请使用 lua_gc微调它的行为。

一些例子:

  • 在减速成为问题的时候禁用垃圾收集器。
  • 让垃圾收集器处于禁用状态,只有在游戏逻辑表明您的 FPS 计数有一些空间时才执行它。您可以预先调整步长,或在运行时发现最佳步长。
  • 禁用收集器并在停止点执行完整收集,即加载屏幕或过场动画或在热门游戏中轮流更改。

  • 您也可以考虑另一种脚本语言。 Squirrel努力成为二代Lua。它试图保留 Lua 的所有优秀特性,同时摒弃任何设计错误。两者之间最大的区别之一是 squirrel uses reference counting而不是垃圾收集。事实证明,引用计数可能比垃圾收集慢一点,但它是非常确定的(也称为实时)。

    关于garbage-collection - Lua 的 GC 和实时游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4064451/

    相关文章:

    flash - AS3 中的实时更新和推送数据

    java - 为什么使用 Epsilon 与 G1 相比,观察到重复的内存分配更慢?

    memory-management - MATLAB 的垃圾收集器?

    具有 nil 值的 Lua 长度运算符 (#)

    lua - 如何在Lua中删除表?

    android - 如何在android中使用USB吉他接口(interface)实时处理音频?

    python - 子进程不会实时显示来自 tcpdump 的数据。它显示暂停约 10-20 秒

    c# - 强制从内存中删除对象

    c# - .Net 垃圾回收标记阶段和巨大的链表

    windows - 如何增加内存来处理超大的 Lua 表