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的弱弱引用表的更多相关文章

  1. Lua table之弱引用

    Lua采用了基于垃圾收集的内存管理机制,因此对于程序员来说,在很多时候内存问题都将不再困扰他们.然而任何垃圾收集器都不是万能的,在有些特殊情况下,垃圾收集器是无法准确的判断是否应该将当前对象清理.这样 ...

  2. Java中的软(弱)引用

    一.Java中的强.软.弱.虚引用 在JDK中我们能够看到有一个java.lang.ref的包.这个包中就是Java中实现强.软.弱.虚引用的包,例如以下: PhantomReference 虚引用: ...

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

    转自:http://blog.csdn.net/xyang81/article/details/44657385   这篇文章比较偏理论,详细介绍了在编写本地代码时三种引用的使用场景和注意事项.可能看 ...

  4. java中强,软,弱,虚引用 以及WeakHahMap

    java中强,软,弱,虚引用  以及WeakHahMap   一:强软引用: 参考:http://zhangjunhd.blog.51cto.com/113473/53092/进行分析   packa ...

  5. 弱弱的玩下Javascript

    前言 好久没有更新博客了,也蛮少捣弄javascript,今儿看到一个题目,关于给你一个面板,你可以随意的在上面画矩形,可以移动和删除任意一个你创建的矩形,心血来潮搞着玩哈,实现起来挺简单的,但这代码 ...

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

    弱弱的战壕 描述 永恒和mx正在玩一个即时战略游戏,名字嘛~~~~~~恕本人记性不好,忘了-_-b. mx在他的基地附近建立了n个战壕,每个战壕都是一个独立的作战单位,射程可以达到无限(“mx不赢定了 ...

  7. 树状数组训练题1:弱弱的战壕(vijos1066)

    题目链接:弱弱的战壕 这道题似乎是vijos上能找到的最简单的树状数组题了. 原来,我有一个错误的思想,我的设计是维护两个树状数组,一个是横坐标,一个是纵坐标,然后读入每个点的坐标,扔进对应的树状数组 ...

  8. VIJOS-P1066 弱弱的战壕

    JDOJ 1247: VIJOS-P1066 弱弱的战壕 题目传送门 Description 永恒和mx正在玩一个即时战略游戏,名字嘛~~~~~~恕本人记性不好,忘了--b. mx在他的基地附近建立了 ...

  9. (十)pdf的构成之交叉引用表

    交叉引用表(xref) 其中包含对文档中所有对象的引用.交叉引用表的目的是允许随机访问文件中的对象,因此我们不需要读取整个PDF文档来定位特定对象.每个对象由交叉​​引用表中的一个条目表示.(该表保存 ...

随机推荐

  1. perl学习笔记三

    子程序 定义子程序(可以在程序的任意位置) 关键字sub.子程序名(不包含与号)以及用花括号封闭起来的代码快. 如:sub marine{ $n+=1; print "hello,sailo ...

  2. VB断点调试

    最近都在敲机房收费系统,这个系统是我们第一次自己在没有源代码的情况下进行的系统. 写程序的时候逻辑非常重要,可是我们还要清楚非常多时候你以为的并非你以为的! 就像在敲机房的时候,我们明明理清了逻辑.并 ...

  3. 在服务端发起一个Post请求

    1.http://www.tuling123.com/openapi/api?key=9d2ff29d44b54e55acadbf5643569584&info=? 上面这个请求在服务端发起 ...

  4. angular中使用daterangepicker完全能用版

    angular版本:angular5 先看效果图: 最新版是这样的: 附上插件的网址: http://www.daterangepicker.com/ 1 安装: daterangepicker依赖于 ...

  5. Cookie-Parser是怎样解析签名后的cookie的(同一时候对cookie和cookie-signature进行说明)

    第一步:我们来学习一下cookie-signature: var cookie=require('./index'); var val = cookie.sign('hello', 'tobiisco ...

  6. 连接redis失败,关闭防火墙即可

    因为linux上有防火墙,我用redis desktop manager 测试所以始终连接不上, 关闭防火墙: systemctl stop firewalld.service #停止firewall ...

  7. 运用Arc Hydro提取河网

    Arc hydro 插件需要 spatial analyst 支持: 解决方法:Tools菜单>>Extensions...,勾选Spatial Analyst 1.设置存储路径 ApUt ...

  8. poj 2553 The Bottom of a Graph(强连通、缩点、出入度)

    题意:给出一个有向图G,寻找所有的sink点.“sink”的定义为:{v∈V|∀w∈V:(v→w)⇒(w→v)},对于一个点v,所有能到达的所有节点w,都能够回到v,这样的点v称为sink. 分析:由 ...

  9. URL重写:Rewirte模块原理详解

    Apache+PHP+MySQL Rewirte主要的功能就是实现URL的跳转和隐藏真实地址,基于Perl语言的正则表达式规范.平时帮助我们实现拟静态,拟目录,域名跳转,防止盗链等.本文将针对mod_ ...

  10. entity framework core 调用存储过程和方法

    目前EF Core调用存储过程,限制很多,比如返回结果必须是定义好的DbSet<>等等.这里用一种曲线救国的方式,自定义两个方法,用原始ado.net解决问题.以MySql数据库为例,代码 ...