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的弱弱引用表

时间: 2024-09-29 21:24:45

lua的弱弱引用表的相关文章

Java中的软(弱)引用

一.Java中的强.软.弱.虚引用 在JDK中我们可以看到有一个java.lang.ref的包,这个包中就是Java中实现强.软.弱.虚引用的包,如下: PhantomReference 虚引用:如果一个对象持有虚引用,就和没有持有引用一样,在任何时候都可能被垃圾回收器回收.虚引用主要用来跟踪对象被垃圾回收的活动,虚引用还有一个和弱.软引用不同的地方是虚引用必须和引用队列联合使用.当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象内存之前,把这个虚引用加入到与之关联的引用队列中

JNI/NDK开发指南(十)——JNI局部引用、全局引用和弱全局引用

转载请注明出处:http://blog.csdn.net/xyang81/article/details/44657385 ????这篇文章比较偏理论,详细介绍了在编写本地代码时三种引用的使用场景和注意事项.可能看起来有点枯燥,但引用是在JNI中最容易出错的一个点,如果使用不当,容易使程序造成内存溢出,程序崩溃等现象.所以讲得比较细,有些地方看起来可能比较啰嗦,还请轻啪!下一篇文章会写一个在Android由于JNI引用使用不当,造成局部引用表溢出而导致程序闪退的案例,请关注! ????做Java

JNI局部引用表溢出:local reference table overflow (max=512)

转载请注明出处:http://blog.csdn.net/xyang81/article/details/44873769 在<JNI/NDK开发指南(十)--JNI局部引用.全局引用和弱全局引用>这篇文章中详细介绍了在JNI中三种引用的使用方式,区别.应用场景和开发注意事项.由于都是理论,看完之后可能印象不够深刻,由其是在开发当中容易出错的地方.所以这篇文章用一个例子说明引用使用不当会造成的问题,以引起大家对这个知识点的重视. 首先创建一个Android工程,在主界面放一个文本框和一个按钮,

Android JNI局部引用表溢出:local reference table overflow (max=512)

<JNI/NDK开发指南(十)——JNI局部引用.全局引用和弱全局引用>这篇文章中详细介绍了在JNI中三种引用的使用方式,区别.应用场景和开发注意事项.由于都是理论,看完之后可能印象不够深刻,由其是在开发当中容易出错的地方.所以这篇文章用一个例子说明引用使用不当会造成的问题,以... songtaste.com/user/10271950/infosongtaste.com/user/10271975/infosongtaste.com/user/10271978/infosongtaste.

Vijos P1066 弱弱的战壕【多解,线段树,暴力,树状数组】

弱弱的战壕 描述 永恒和mx正在玩一个即时战略游戏,名字嘛~~~~~~恕本人记性不好,忘了-_-b. mx在他的基地附近建立了n个战壕,每个战壕都是一个独立的作战单位,射程可以达到无限(“mx不赢定了?!?”永恒[email protected][email protected]). 但是,战壕有一个弱点,就是只能攻击它的左下方,说白了就是横纵坐标都不大于它的点(mx:“我的战壕为什么这么菜”ToT).这样,永恒就可以从别的地方进攻摧毁战壕,从而消灭mx的部队. 战壕都有一个保护范围,同它的攻击

Lua学习笔记(三):表的构造

构造器是创建和初始化表的表达式.表是Lua特有的功能强大的东西.最简单的构造函数是{},用来创建一个空表.可以直接初始化数组: 1 days = {"Sunday", "Monday", "Tuesday", "Wednesday", 2 "Thursday", "Friday", "Saturday"} Lua将“Sunday”初始化days[1](第一个元素索引为

lua进阶8-- C++读取lua文件里的三维表

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">前面lua进阶里面讲到用C++读取二维表,但是最近又有了新的需求,lua文件里面出现了三维表,自己摸索了一下,终于找到了解决的方式,在这里面与大家分享一下</span> 我的lua文件里面的三维表结构如下 stage = { {m_nId = 105,m_nBoss = 0,

[FZYZOJ 1003] 弱弱的战壕

P1003 -- 弱弱的战壕 时间限制:1000MS 内存限制:65536KB Description 永恒和lmx正在玩一个即时战略游戏,名字嘛~~~~~~恕本人记性不好,忘了-_-b. mx在他的基地附近建立了n个战壕,每个战壕都是一个独立的作战单位,射程可以达到无限(“lmx不赢定了?!?”永恒[email protected][email protected]). 但是,战壕有一个弱点,就是只能攻击它的左下方,说白了就是横纵坐标都不大于它的点(mx:“我的战壕为什么这么菜”ToT).这样

java学习笔记-1205班李夏*:弱弱的说一句:尚硅谷,你值得拥有

时间过得真快,一晃眼一个月都过去了.记得前几个月看尚硅谷java视频的情景,还很清晰. 在这一个月中从最开始来北京java培训时的激动到现在的对北京的适应感觉经历了许多许多,再这一个月中我对北京的人文文化有了比较深入的了解,发现原来一个团队,集体可以如此和谐,每个人也都可以如此努力的为梦想,为工作,使我有了莫名的动力. 对于前一个阶段的总结,我主要可以分为以下几个方面: 第①方面:在学习上的总结,由于学校的期末考试我不得已把自己来北京的时间推迟了两周,来了之后发现这里的进度特别快,心想这下死定了