Gar*_*man 16 lua garbage-collection
我自己也听过并经历过:Lua的垃圾收集器会因为脚本部分的增长而导致严重的FPS下降.
这是我发现与垃圾收集器有关的,例如,临时创建的每个Vector()userdata对象都存在,直到收集垃圾.
我知道Python使用引用计数,这就是为什么它不需要像Luas GC那样需要的任何巨大的性能执行步骤.
Ano*_*on. 15
因为引用计数垃圾收集器很容易泄漏对象.
琐碎的例子:一个双向链表.每个节点都有一个指向下一个节点的指针 - 它本身由下一个节点指向.如果您只是取消引用列表本身并期望它被收集,那么您只是泄漏了整个列表 - 没有一个节点的引用计数为零,因此它们都会保持彼此存活.使用引用计数垃圾收集器,只要有循环对象,您基本上需要将其视为非托管对象,并在完成后自行显式处理它.
请注意,除引用计数外,Python还使用适当的垃圾收集器.
BMi*_*tch 10
虽然其他人已经解释了为什么需要垃圾收集器,但请记住,您可以将Lua中的垃圾收集周期配置为更小,更少频率或按需.如果您分配了大量内存并且正在忙于绘制帧,那么将阈值设置得非常大,以避免收集周期,直到游戏中断.
您在此声明的基础上使用的是什么版本的Lua?当"魔兽世界"从Lua 5.0切换到5.1时,垃圾收集导致的所有性能问题都严重减少.
使用Lua 5.0的垃圾收集,收集垃圾(并阻止其他任何事件同时发生)所花费的时间与当前使用的内存量成正比,从而导致大量工作以最小化WoW的内存使用量插件.
使用Lua 5.1的垃圾收集,收集器变为增量,因此它不像以前那样收集垃圾时锁定游戏.现在,与大多数用户创建的插件中可怕的低效代码问题相比,垃圾收集对性能的影响非常小.
单独引用计数不足以使垃圾收集器正常工作,因为它不会检测周期.即使Python也不单独使用引用计数.
想象一下,对象A和B各自拥有对彼此的引用.即使你,程序员不再持有对任何一个对象的引用,引用计数仍然会说对象A和B有引用它们的引用.
有许多不同的垃圾收集方案,有些在某些情况下效果更好,有些在其他情况下会更好.语言设计者可以尝试选择他们认为最适合他们语言的垃圾收集器.
| 归档时间: |
|
| 查看次数: |
7992 次 |
| 最近记录: |