lua的弱弱引用表
lua有GC。细节无需太关注。知道些主要的即可,能local就一定不要global;
还有在数组里的对象,除非显式=nil,否则非常难回收;
只是能够用弱引用表来告诉GC。
外部引用为0,就不要管我,请del it。
weak table是通过元表实现,元表里的__mode字段包括k或者v;k表示key为弱引用。v表示value为弱引用。
1、首先看一个普通的样例:
a = {}
key = {}
a[key] = 1
key = {}
a[key]=2
collectgarbage()
for k,v in pairs(a)
do print(v)
end
输出是:
>lua -e "io.stdout:setvbuf 'no'" "test.lua"
1
2
>Exit code: 0
这里没有什么。就是把a里的东西所有打印出来了。
2、然后设置a的元表 包括k。就表示a的key是弱引用
a = {}
b = {__mode = 'k'}
setmetatable(a, b)
key = {}
a[key] = 1
key = {}
a[key]=2
collectgarbage()
for k,v in pairs(a)
do print(v)
end
key经过一次覆盖,除了a没有其它引用,并且由于a的key为弱引用,所以能够回收了。正如预料输出:
>lua -e "io.stdout:setvbuf 'no'" "test.lua"
2
>Exit code: 0
3、然后看一个value为weak table的样例:
a = {}
b = {__mode = 'v'}
setmetatable(a, b)
key = {11,12}
a[1] = key
key = {13}
a[2]= key
collectgarbage()
for k,v in pairs(a) do
for m,n in pairs(v)
do print(n)
end
end
key经过覆盖,前一个被回收啦。
终于输出:
>lua -e "io.stdout:setvbuf 'no'" "test.lua"
13
>Exit code: 0
经过上面的分析,你稍微明确weak table木有,假设木有。那就再看看书吧。
lua的弱弱引用表的更多相关文章
- Lua table之弱引用
Lua采用了基于垃圾收集的内存管理机制,因此对于程序员来说,在很多时候内存问题都将不再困扰他们.然而任何垃圾收集器都不是万能的,在有些特殊情况下,垃圾收集器是无法准确的判断是否应该将当前对象清理.这样 ...
- Java中的软(弱)引用
一.Java中的强.软.弱.虚引用 在JDK中我们能够看到有一个java.lang.ref的包.这个包中就是Java中实现强.软.弱.虚引用的包,例如以下: PhantomReference 虚引用: ...
- JNI/NDK开发指南(十)——JNI局部引用、全局引用和弱全局引用
转自:http://blog.csdn.net/xyang81/article/details/44657385 这篇文章比较偏理论,详细介绍了在编写本地代码时三种引用的使用场景和注意事项.可能看 ...
- java中强,软,弱,虚引用 以及WeakHahMap
java中强,软,弱,虚引用 以及WeakHahMap 一:强软引用: 参考:http://zhangjunhd.blog.51cto.com/113473/53092/进行分析 packa ...
- 弱弱的玩下Javascript
前言 好久没有更新博客了,也蛮少捣弄javascript,今儿看到一个题目,关于给你一个面板,你可以随意的在上面画矩形,可以移动和删除任意一个你创建的矩形,心血来潮搞着玩哈,实现起来挺简单的,但这代码 ...
- Vijos P1066 弱弱的战壕【多解,线段树,暴力,树状数组】
弱弱的战壕 描述 永恒和mx正在玩一个即时战略游戏,名字嘛~~~~~~恕本人记性不好,忘了-_-b. mx在他的基地附近建立了n个战壕,每个战壕都是一个独立的作战单位,射程可以达到无限(“mx不赢定了 ...
- 树状数组训练题1:弱弱的战壕(vijos1066)
题目链接:弱弱的战壕 这道题似乎是vijos上能找到的最简单的树状数组题了. 原来,我有一个错误的思想,我的设计是维护两个树状数组,一个是横坐标,一个是纵坐标,然后读入每个点的坐标,扔进对应的树状数组 ...
- VIJOS-P1066 弱弱的战壕
JDOJ 1247: VIJOS-P1066 弱弱的战壕 题目传送门 Description 永恒和mx正在玩一个即时战略游戏,名字嘛~~~~~~恕本人记性不好,忘了--b. mx在他的基地附近建立了 ...
- (十)pdf的构成之交叉引用表
交叉引用表(xref) 其中包含对文档中所有对象的引用.交叉引用表的目的是允许随机访问文件中的对象,因此我们不需要读取整个PDF文档来定位特定对象.每个对象由交叉引用表中的一个条目表示.(该表保存 ...
随机推荐
- SpringMVC文件上传的配置
记述一下步骤以备查. 准备工作: 需要把Jakarta Commons FileUpload及Jakarta Commons io的包放lib里. 我这边的包是: commons-fileupload ...
- nodeJs-autoMerge
/** * Created by Administrator on 2016/1/16. */ var fs = require('fs'); var filedir='automay'; conso ...
- wmi在渗透测试中的运用
Abusing WMI to Build a Persistent, Asynchronous, and Fileless Backdoor 滥用 WMI 打造一个永久.异步.无文件后门 http:/ ...
- golang一些知识点
2.冒泡排序(二维数组使用): func main() { i := 1 MYLABEL: for { i++ if i > 3 { break MYLABEL } } fmt.Println( ...
- Layer 初始
Layer 初始 介绍:很不错的一个弹出框解决方案 丰富多样的Web弹出层组件,可轻松实现Alert/Confirm/Prompt/普通提示/页面区块/iframe/tips等等几乎所有的弹出交互.目 ...
- sort-colors——排序3种数字
题目描述 Given an array with n objects colored red, white or blue, sort them so that objects of the same ...
- MySQL 字符编码总结
今天操作服务器数据库时遇到了Mysql中文字符乱码的问题,主要原因是因为安装的时候没有设置好字符集. 很是郁闷,因为库里有很多重要数据,所以重装是不可能了,于是决定找找在不重装且不改代码的前提下,能搞 ...
- UICollectionView的header悬停
UICollectionView的header悬停,继承UICollectionViewFlowLayout,重写相关方法 // // StickyHeaderLayout.h // Wombat / ...
- LBS 附近的人
1 http://www.infoq.com/cn/articles/depth-study-of-Symfony2 2 http://lbsyun.baidu.com/
- MapReduce小文件处理之CombineFileInputFormat实现
在MapReduce使用过程中.一般会遇到输入文件特别小(几百KB.几十MB).而Hadoop默认会为每一个文件向yarn申请一个container启动map,container的启动关闭是很耗时的. ...