Lua程序设计(六十三)

本文介绍了Lua语言的垃圾收集机制,从标记-清楚式的垃圾收集器到增量式收集器,详细解析了每个阶段的工作原理,包括标记、清理、清除和析构阶段。Lua5.1引入的增量式收集器避免了全局暂停,而Lua5.2的紧急垃圾收集在内存分配失败时进行。
摘要由CSDN通过智能技术生成

垃圾收集器

Lua5.0之前, Lua语言使用的都是一个简单的标记-清楚(mark-and-sweep)式垃圾收集器(Garbage Collector GC)。这种收集器又被称作“stop-the-world(全局暂停)式的收集器,意味着Lua语言会时不时地停止主程序的运行来执行一次完整的垃圾收集周期(garbage-collection style)。 每一个垃圾收集周期由四个阶段组成:标记( mark), 清理(cleaning),清除(sweep)和析构(finalization)。

标记阶段把根节点结合(root set)标记为活跃,根节点集合由Lua语言可以直接访问的对象组成。在Lua语言中,这个集合只包括C注册表。

保存在一个活跃对象中的对象是程序可达的,因此也会被标记为活跃(弱引用不遵循这个规则)。当所有可达对象都被标记为活跃时,标记阶段完成。

Lua先执行清理阶段,再开始清除阶段。在清理阶段中处理析构器和引用表。首先,Lua语言遍历所有被标记为需要进行析构,但有没有被标记为活跃状态的对象,这些没有被标记为活跃状态的对象会被标记为活跃(复苏)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值