lua弱表引用

1、普通垃圾回收

--lua弱表,主要是删除key或者value是table的一种元方法
--元表里的__mode字段包含k或者v;k表示key为弱引用;v表示value为弱引用  

local testa = {}
tbl_key = {}
testa[tbl_key] = 1
tbl_key = {}
testa[tbl_key] = 2  

--垃圾回收
collectgarbage()  

local function PrintInfo()  

    for k, v in pairs(testa) do
        print(k, "===", v)
    end  

end  

PrintInfo()  

显示结果:

>lua -e "io.stdout:setvbuf ‘no‘" "Lua.lua"
table: 004FB890 === 1
table: 004FB8E0 === 2
>Exit code: 0  

2、设置弱引用为key

local testa = {}
local mt = {__mode = ‘k‘}
setmetatable(testa,mt)  

tbl_key = {}
testa[tbl_key] = 1
tbl_key = {}
testa[tbl_key] = 2  

--垃圾回收
collectgarbage()  

local function PrintInfo()  

    for k, v in pairs(testa) do
        print(k, "===", v)
    end  

end  

PrintInfo()  

显示结果:

>lua -e "io.stdout:setvbuf ‘no‘" "Lua.lua"
table: 006EB930 === 2
>Exit code: 0  

通过key的弱引用,覆盖了key为key_table的值;没有其他地方在引用,所以被回收掉了

3、设置弱引用为value

local testa = {}
local mt = {__mode = ‘v‘}
setmetatable(testa,mt)  

tbl_key = {1,2,3}
testa[1] = tbl_key
tbl_key = {4,5,6}
testa[2] = tbl_key  

--垃圾回收
collectgarbage()  

local function PrintInfo()  

    for k, v in pairs(testa) do
        for key, value in pairs(v) do
            print(" value===", value)
        end
    end  

end  

PrintInfo()  

结果:

>lua -e "io.stdout:setvbuf ‘no‘" "Lua.lua"
 value=== 4
 value=== 5
 value=== 6
>Exit code: 0

转载:http://blog.csdn.net/u012071200/article/details/31400541

时间: 2024-10-06 00:12:20

lua弱表引用的相关文章

Java中的软(弱)引用

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

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

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

Lua查找表元素过程(元表、__index方法是如何工作的)(转载)

文章来源于 Lua查找表元素过程(元表.__index方法是如何工作的) Lua的表本质其实是个类似HashMap的东西,其元素是很多的Key-Value对,如果尝试访问了一个表中并不存在的元素时,就会触发Lua的一套查找机制,也是凭借这个机制,才能够实现“面向对象”的. 举例说明: tempTable = {} print(tempTable.memberA) --这里试图打印tempTable并不存在的成员memberA 执行结果:nil输出为nil的原因很简单,tempTable中并没有m

4.17 删除从其他表引用的记录

从一个表中删除被另外一个表引用的记录.考虑下面的DEPT_ACCIDENTS表,其中每行代表生产过程中的一次事故,每行记录了发生的部门以及事故类型.create table dept_accidents(deptno integer,accident_name varchar(20));insert into dept_accidents values (10,'BROKEN FOOT');insert into dept_accidents values (10,'FLESH WOUND');

【开源项目】excel导出lua配置表工具

项目地址:https://coding.net/u/linchaolong/p/Excel2Lua/git 开发语言:Java 说明: 1.因为是使用Java语文开发的,所以是跨平台的.需要Java运行环境(https://www.oracle.com/java/index.html). 2.支持的excel文件格式:xls.xlsx. 3.支持在单元格中插入外部文件的内容. excel配置表示例: 第一行为key,第二行为描述. 第一列的值为该行table中的key. #f:是一个插入外部文件

查找某个表被哪些表引用。外键

select fk_col.constraint_name, fk_col.table_name, fk_col.column_name  from user_constraints pk, user_constraints fk, user_cons_columns fk_col where pk.table_name = 'TEST'   and pk.constraint_type = 'P'   and fk.r_constraint_name = pk.constraint_name 

Lua弱引用table

弱引用table 与python等脚本语言类似地,Lua也采用了自动内存管理(Garbage Collection),一个程序只需创建对象,而无需删除对象.通过使用垃圾收集机制,Lua会自动删除过期对象.垃圾回收机制可以将程序员从C语言中常出现的内存泄漏.引用无效指针等底层bug中解放出来. 我们知道Python的垃圾回收机制使用了引用计数算法,当指向一个对象的所有名字都失效(超出生存期或程序员显式del了)了,会将该对象占用的内存回收.但对于循环引用是一个特例,垃圾收集器通常无法识别,这样会导

Lua 弱引用table

本文转载于:http://www.benmutou.com/archives/1808 这次要介绍的内容比较少,就一个——弱引用table 1.无法超越人类智慧的智能——自动内存管理的缺陷 我们都知道,Lua是具备自动内存管理的,好吧,也许有些朋友不知道. 我们只管创建对象,无须删除对象(当然,对于不要的对象你需要设置一下nil值),Lua会自动删除那些被认为是垃圾的对象. 问题就出现在,什么对象才是垃圾对象,有些时候,我们很清楚某个对象是垃圾,但是,Lua却无法发现. 比如这样一个例子: t

树形打印lua table表

local print = print local tconcat = table.concat local tinsert = table.insert local srep = string.rep local type = type local pairs = pairs local tostring = tostring local next = next function print_lua_table (lua_table, indent) if not lua_table or t