当前位置:主页 > 365备用网址官方网站 >

Cloud Wind BLOG Lua 5.2新一代GC

作者:365bet英超发布时间:2019-06-12 09:46

Lua的作者一再强调这个模型是实验性的,不确定它是否应该比以前的增量模式更好。
邮件列表反复显示在将来的Lua版本中可能会删除此功能。
主要原因是gc模块的实现复杂性增加了,但很难得到实际证据表明它在实际项目中更有效。
我读了lua5。
2
相关代码2的生成代码可能以这种方式实现。
在生成模式中,
在清理阶段,已处理的黑色对象(不可擦除对象)不再重置为白色(要扫描的对象),但已将OLDBIT标记添加到对象中。
Lua分配新的GCObjects以从一端加入对象列表,因此一旦在清理阶段找到OLDBIT标志,您将无法遍历链接列表。
生成的目的是因为清洁阶段只能处理最后一个gc末尾新添加的对象。
它可以大大降低每个gc的清洁成本。
(例如,以前,至少遍历VM中的所有对象,黑色对象为白色,白色对象为自由等)
由于在擦除阶段不再改变黑色标记,因此在新扫描轮次期间可以显着减少扫描对象的数量。
这是因为未触摸的旧对象是黑色,黑色对象不再交叉。
扫描过程仅需要处理灰色对象和灰色对象所引用的新对象(白色)。
这意味着不需要遍历在Gc时间期间未访问的历史对象。
在世代模式中,整个收集过程仍会定期激活。它比一步增量模式长。它是一个停止所有对象的停止世界操作。
但是,当永久使用内存稳定并且大多数临时对象在短时间内使用时,完整集合的激活非常罕见。
此外,由于大多数临时物体被快速清理,因此总体负荷降低。


365体育彩票网址