Lua垃圾回收和弱引用
2016-04-29 17:04
393 查看
lua有自动的内存管理机制,只需要创建对象,无需删除,当没有该对象的引用的时候(引用未nil),lua就会释放内存,但是有的时候会保存一些不必要的引用,为了让这种引用不影响垃圾回收,可以设置成弱引用。
强制垃圾回收的方法:
collectgarbage()
将table设置成弱引用:
setmetatable(table, {__mode = “kv”})
这里就是将key和value都设置成了弱引用,垃圾收集会删除所有在执行时未使用的编译结果,也可以单独设置”k”,”v”。弱引用就和没有引用一样,如果一个对象没有强引用,只有弱引用就会被回收,如果有强引用和弱引用就不会被回收。注意,数字,布尔,字符串作为key或者value时是不会被回收的,只会回收对象。key和value中的其中一个被回收了,那么table中的整个条目也会被回收。
用空间来换时间的备忘录函数:
以上函数就是把需要反复执行的同一个函数的结果保存起来,再次执行的时候检查是否已经有了,有了就直接返回,避免重复计算。
强制垃圾回收的方法:
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
以上函数就是把需要反复执行的同一个函数的结果保存起来,再次执行的时候检查是否已经有了,有了就直接返回,避免重复计算。
相关文章推荐
- Lua学习(六)元表和元方法
- Lua_第26章撰写 C 函数的技巧
- Ionic的项目结构(angluar js)
- Lua 5.2/5.3 热更新小结
- 记录lua的table转string一个问题
- 我理解的设计模式:工厂模式
- lua: pcall xpcall debug
- Lua_第25章 调用 C 函数
- C++与Lua5.3.2的相互调用
- Lua 中的string库(字符串函数库)总结
- RobotFrameWork(四)变量运算与Evaluate
- C++调用lua简单的例子
- Lua从入门到放弃--协同程序
- Lua简明教程
- Lua学习(五)函数进阶篇
- Lua学习(四)函数
- 150. Evaluate Reverse Polish Notation
- 150. Evaluate Reverse Polish Notation
- Lua学习(三)语句
- Lua 15 分钟快速入门(Learn Lua in 15 Minutes)