Lua语法(五)——垃圾回收

参考链接:
系列链接: Lua语法(一)
系列链接: Lua语法(二)——闭包/日期和时间
系列链接: Lua语法(三)——元表与元方法
系列链接: Lua语法(四)——协程
系列链接: Lua语法(五)——垃圾回收
系列链接: Lua语法(六)——面相对象编程

垃圾回收

  Lua语言使用自动内存管理。通过垃圾收集自动删除成为垃圾的对象。

Lua中主要的辅助垃圾收集器的机制有:

  • 弱引用表 (weak table)
  • 析构器 (finalizer)
  • 函数 collectgarbage

弱引用表允许Lua收集被程序访问的对象,但是数字和布尔不会被回收;

析构器允许收集不在垃圾收集器控制下的外部对象;

函数 collectgarbage 允许手动控制垃圾收集器的步长

弱引用表

一个表是否为弱引用表是由其元表中的 __mode控制。

如果该字段值为"k", 那么这个表的键为弱引用

如果该字段值为"v",那么这个表的值为弱引用

如果该字段值为"kv",那么这个表的键和值都为弱引用

__mode模式为 “k”

表示弱引用表的键为弱引用,当键被覆盖,可以被回收

local weaktable={
   }
local metable ={
   
    __mode ="k"
}
--这里tab就是返回的weaktable
local tab = setmetatable(weaktable,metable)

local table1={
   }
weaktable[table1]=5

--当打开这里的注释后,需要给collectgarbage()方法添加上注释,会发现弱引用表里面的值被回收
-- for key, value in pairs(weaktable) do
--     print(key,value)
-- end

--将键置为nil,弱引用表中就会回收它
table1=nil
print("---------
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值