Lua 弱表与垃圾回收机制

0人阅读 评论(0) 收藏 举报
分类:

弱表

weak表是一个表,它拥有metatable,并且metatable定义了 _mode 字段
weak表中的引用是弱引用,弱引用不会导致对象的引用计数变化。
如果一个对象只有弱引用指向它,那么垃圾回收(gc)会自动回收该对象的内存。

_mode 字段可以取3个值: k  v  kv

k v 是表的键值, 都属于weak,任何情况下只要有一个被gc回收,那么 k v 都会被从表中移除

例程

t = {}
t1 = {}
t2 = {}
t[1] = t1
t[2] = t2
t[3] = 2
t1 = nil
t2 = nil
print(table.getn(t))
collectgarbage();	-- 垃圾回收
print(table.getn(t))

运行结果
3
3

例程

t = {}
t1 = {}
t2 = {}
t[1] = t1
t[2] = t2
t[3] = 2
setmetatable(t, {__mode = "v"}) -- 设置为弱表, 引用计数不会增加
t1 = nil
t2 = nil
print(table.getn(t))
collectgarbage();	-- 垃圾回收
print(table.getn(t))

运行结果
3
0

例程

t = {}
tb = {x = 10, y = 20, z = t}	-- z 引用t
setmetatable(t, {__mode = "v"})	-- 设置之后 t 的表的引用计数为1,不会增加为2
for k, v in pairs(tb) do
	print(k, type(k), v, type(v))
end

运行结果

y string 20 number
x string 10 number
z string table: 0027B550 table

查看评论

DirectX5.0最新游戏编程指南 DirectDraw篇 三、DirectDraw的要素(一)

 三、DirectDraw的要素    DirectDraw中最基本的要素有协作等级、显示模式、DirectDraw对象、表面、调色板、剪切板等,下面对各个要素逐一进行介绍。1、协作等级(Cooper...
  • holyfire
  • holyfire
  • 2001-04-14 12:56:00
  • 1975

Lua弱表Weak table

弱表(weak table)是一个很有意思的东西,像C++/Java等语言是没有的。弱表的定义是:Aweak table is a table whose elements are weak refe...
  • ouyangshima
  • ouyangshima
  • 2014-10-20 20:04:37
  • 2730

lua弱表引用

1、普通垃圾回收
  • u012071200
  • u012071200
  • 2014-06-16 17:39:29
  • 1083

lua 弱表

一开始,应该要记住的是: (1)weak表中的引用是弱引用(weakreference),弱引用不会导致对象的引用计数变化,换言之,如果一个对象只有弱引用指向它,那么gc会自动回收该对象的内存 (...
  • u011922261
  • u011922261
  • 2015-06-12 23:59:37
  • 381

Lua内存泄露检测原理和weak_table弱引用

lua内存泄露 首先第一点,lua中的内存泄露和我们所说的c/c++中的内存泄露本质上是不一样的。 lua中有垃圾回收机制(GC),所以理论上是不会有内存泄露的。当它进行GC的时候,会从根部开始扫描所...
  • yxtxiaotian
  • yxtxiaotian
  • 2016-05-22 17:09:14
  • 3058

lua的垃圾回收机制

垃圾回收的目的是要释放掉不再被使用变量所占用的内存。 Lua的垃圾收集机制使用了名为标志和清扫(Mark-and-Sweep)的方式。默认情况下,所有变量都标记为“可回收”,回收是从根节点_G出发,...
  • xufeng0991
  • xufeng0991
  • 2015-03-31 10:53:55
  • 3464

探索Lua5.2内部实现:Garbage Collection(1) 原理

Lua5.2采用垃圾回收机制对所有的lua对象(GCObject)进行管理。Lua虚拟机会定期运行GC,释放掉已经不再被被引用到的lua对象。 基本算法 基本的垃圾回收算法被称为"mark-and...
  • yuanlin2008
  • yuanlin2008
  • 2013-03-13 17:55:07
  • 21017

lua 之弱引用

一个table的弱引用类型是通过其元素表中的__mode字段来决定的,这个字段的值应为一个字符串,如果这个字符串中包含字母'k'/'v'那么这个table 的value是弱引用,代码如下: key =...
  • ganpengjin1
  • ganpengjin1
  • 2013-11-15 11:12:37
  • 2765

Lua中的垃圾回收机制

遇到问题: 在运行lua脚本时,出现下面报错说内存不足:>lua -e "io.stdout:setvbuf 'no'" "最大值最小值检查.lua" lua: not enough memory...
  • Dandelion_gong
  • Dandelion_gong
  • 2017-09-18 22:18:04
  • 373

lua垃圾回收机制

一、检测lua内存泄漏: 注:使用“collectgarbage("collect")”,局部变量v被回收,my_list没有被回收。 注:局部变量v占用的内存被回收。 ...
  • tianxiawuzhei
  • tianxiawuzhei
  • 2015-06-29 11:32:26
  • 5506
    个人资料
    持之以恒
    等级:
    访问量: 873
    积分: 658
    排名: 7万+
    文章存档
    最新评论