lua的垃圾回收机制

Lua的垃圾回收采用标志和清扫方法,通过从全局环境_G开始标记可达对象来确定哪些变量可以回收,释放不再使用的内存。该机制确保了有效内存管理。
摘要由CSDN通过智能技术生成
               

垃圾回收的目的是要释放掉不再被使用变量所占用的内存。

Lua的垃圾收集机制使用了名为标志和清扫(Mark-and-Sweep)的方式。默认情况下,所有变量都标记为“可回收”,回收是从根节点_G出发,可达的对象标记为“不可回收”,然后回收没有被标记为“不可回收”的变量。


一 回收机制


基础的Mark-and-Sweep算法是最古老的解决循环引用情况垃圾收集算法之一。
顾名思义,这是一个two phases的算法,可用很简单的文字描述:
(1)Mark phase(标志阶段)
1> 每个可被gc的对象都拥有一个标志位,初始为0(unmarked)。
2> 定义程序中第一层可访问的对象集合为 根对象集合(root set)。
3> 递归遍历根集合中所有对象的引用关系,如果某对象标志位为unmarked,
则标志为1(marked)。


(2)Sweep phase(清扫阶段)
1> 遍历所有现存的对象:将标志位还是unmarked的对象释放;
同时将标志为marked的对象重新标志为unmarked,为下次gc做准备。


二 回收函数
1 相关功能
collectgarbage函数提供了多项功能:
停止垃圾回收;
重启垃圾回收;
强制执行一次回收循环;
强制执行一步垃圾回收;
获取Lua占用的内存;
以及两个影响垃圾回收频率和步幅的参数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值