luagc

c#的gc是使用双色标记法,即非黑即白(有引用和没有引用),lua在5.1改为三色标记,添加了一个中间态灰色,表示当前对象已经被gc遍历过了,但其引用的对象还没有被遍历过,gc的流程就是将根节点所引用的节点放入灰色列表,每次gc的时候从灰色列表取一个对象将其变为黑色,然后遍历其引用的所有对象,将其变为灰色。标记完成后清除掉所有白色的对象,并将所有对象改为白色。
这样处理使得lua的gc可以中断,下次从灰色节点继续处理。
对新插入对象的处理:
可能gc中断后有加入了新的对象,会影响到与其关联的节点的颜色,比如一个table被标记为黑色,向其插入一个白色的节点,lua会将这个table重新变为灰色。
双白色:使用两种白色标记,目的是防止在创建对象(新创建的对象都标记成白的)后立马gc,将新创建的对象回收
分代gc,和c#的类似,分为两代,经历过两次gc的对象划为第一代,其他为第0代,不同的代gc的频率不同
优化:
尽量使用局部变量,避免对象一直有引用导致无法回收。
不用的对象可以显式耳道置为nil
字符串拼接

posted @   mc宇少  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示