Lua垃圾回收和弱引用

lua有自动的内存管理机制,只需要创建对象,无需删除,当没有该对象的引用的时候(引用未nil),lua就会释放内存,但是有的时候会保存一些不必要的引用,为了让这种引用不影响垃圾回收,可以设置成弱引用。
强制垃圾回收的方法:
collectgarbage()
将table设置成弱引用:
setmetatable(table, {__mode = “kv”})
这里就是将key和value都设置成了弱引用,垃圾收集会删除所有在执行时未使用的编译结果,也可以单独设置”k”,”v”。弱引用就和没有引用一样,如果一个对象没有强引用,只有弱引用就会被回收,如果有强引用和弱引用就不会被回收。注意,数字,布尔,字符串作为key或者value时是不会被回收的,只会回收对象。key和value中的其中一个被回收了,那么table中的整个条目也会被回收。

用空间来换时间的备忘录函数:

     local results = {}
     setmetatable(results, {__mode = "v"})
     function createRGB(r,g,b)
          local key = r .. g .. b
          local color = results[key]
          if color == nil then 
               color = {red = r, green = g, blue = b}
               results[key] = color
          end
          return color
     end

以上函数就是把需要反复执行的同一个函数的结果保存起来,再次执行的时候检查是否已经有了,有了就直接返回,避免重复计算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值