房产网站开发公司,一条龙建站多少钱,深圳系统开发高端网站建设,微信小程序注册登录Lua垃圾回收机制
在 Lua 中#xff0c;一共只有8种数据类型#xff0c;分别为 nil 、boolean 、userdata 、number 、string 、 table 、 function 、 userdata 和 thread 。其中#xff0c;只有 string table function thread 四种是以引用方式共享#xff0c;是需要被 G…Lua垃圾回收机制
在 Lua 中一共只有8种数据类型分别为 nil 、boolean 、userdata 、number 、string 、 table 、 function 、 userdata 和 thread 。其中只有 string table function thread 四种是以引用方式共享是需要被 GC 管理回收的对象。 Lua采用了标记清除式Mark and SweepGC算法算法简述 标记每一次执行GC前从根节点开始遍历每一个相关节点进行标记 清除标记完成后遍历对象链表然后对需要执行清除标记的对象进行清除
使用三色法白灰黑作为对象的三种状态 新白可以回收的对象新创建的对象初始状态是新白但不会被清除 旧白可以回收的对象lua只会清除旧白GC后会更新新白 灰色等待回收的对象该对象已被GC访问过但该对象引用的其它对象还未标记 黑色不可回收的对象
清理流程
将root集合引用到的对象从White设置成Gray并放到Gray集合中;while(Gray集合不为空,并且没有超过本次计算量的上限)
{从Gray集合中移除一个对象O并将O设置成Black状态;for(O中每一个引用到的对象O1) {if(O1在White状态) {将O1从White设置成Gray并放到到Gray集合中}}
}
for(任意一个对象O){if(O在White状态)销毁对象O;else将O设置成White状态;
}