弱引用table

    lua使用自动内存管理机制,通过垃圾回收器来回收内存
    垃圾回收器只能回收它认为是垃圾的内容,而不能回收用户认为是垃圾的内容
    典型的例子栈,栈一般用一个数组和一个表示顶部的索引值表示
    如果弹出一个元素,那么仅是把栈顶索引减一,
    但这个元素还留在内存在被这栈数组引用着,所以垃圾回收器不知道它是垃圾
    全局变量和table里的内容会被垃圾回收器回收,只能手动置为nil
    因此需要一种与回收器可以协作的机制,这就是弱引用(weak reference)
    lua里用弱引用table(weak table)来实现这个机制
    3种弱引用table
        1.具有弱引用key的table
        2.具有弱引用value的table
        3.同时具有弱引用key和弱引用value的table
    无论是哪种类型的弱引用table,只要有一个key或value被回收了
    那么他们所在的整个条目都会从table中删除
    table的弱引用类型通过其元表中的__mode字段来决定,这个字段是一个字符串
       1.__mode字段中如果包含"k"则是key的弱引用
       2.__mode字段中如果包含"v"则是value的弱引用
       3.__mode字段中包含"k"和"v"则是key、value的弱引用
            a={}
            b={__mode="k"}
            setmetatable(a,b)    --table a的key就是弱引用
            key={}               --创建第一个key 
            a[key]=1
            key={}               --创建第二个key
            a[key]=2
            collectgarbage()     --强制进行一次垃圾收集 
            for k,v in pairs(a) do print(v) end
            --> 2
    第二次key={}会覆盖第一个key,这时再没有对第一个key的引用了,所以会回收
    第二个key由于还被变量key引用,所以不会回收
    lua只会回收用弱引用table中的对象
    如果key是number、boolean、string则不会回收,所以上例中用table来当key
    可以使用弱引用table来实现缓存等机制,热数据不会被回收,不用的数据自动释放
 

lua学习笔记(十二)的更多相关文章

  1. python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL

    python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...

  2. Go语言学习笔记十二: 范围(Range)

    Go语言学习笔记十二: 范围(Range) rang这个关键字主要用来遍历数组,切片,通道或Map.在数组和切片中返回索引值,在Map中返回key. 这个特别像python的方式.不过写法上比较怪异使 ...

  3. java jvm学习笔记十二(访问控制器的栈校验机制)

    欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 本节源码:http://download.csdn.net/detail/yfqnihao/4863854 这一节,我们 ...

  4. Lua学习笔记(二):基本语法

    Lua学习指南:http://www.lua.org/manual/ 首先我们要明确的一点是:在Lua中,除了关键字外一切都是变量. Lua关键字 可以查看这个地址:http://www.lua.or ...

  5. (C/C++学习笔记) 十二. 指针

    十二. 指针 ● 基本概念 位系统下为4字节(8位十六进制数),在64位系统下为8字节(16位十六进制数) 进制表示的, 内存地址不占用内存空间 指针本身是一种数据类型, 它可以指向int, char ...

  6. Python学习笔记(十二)—Python3中pip包管理工具的安装【转】

    本文转载自:https://blog.csdn.net/sinat_14849739/article/details/79101529 版权声明:本文为博主原创文章,未经博主允许不得转载. https ...

  7. Lua 学习笔记(二)语法、类型、值

    首先Lua执行的每一段代码都称之为“程序块”,一个程序块也就是一连串的语句或命令,例如一个源码文件或一行代码.Lua语句之间并不需要分隔符,如代码中的换行就不起任何作用,当然为了养成编码习惯当两条或者 ...

  8. ROS学习笔记十二:使用gazebo在ROS中仿真

    想要在ROS系统中对我们的机器人进行仿真,需要使用gazebo. gazebo是一种适用于复杂室内多机器人和室外环境的仿真环境.它能够在三维环境中对多个机器人.传感器及物体进行仿真,产生实际传感器反馈 ...

  9. JavaScript权威设计--命名空间,函数,闭包(简要学习笔记十二)

    1.作为命名空间的函数 有时候我们需要声明很多变量.这样的变量会污染全局变量并且可能与别人声明的变量产生冲突. 这时.解决办法是将代码放入一个函数中,然后调用这个函数.这样全局变量就变成了 局部变量. ...

  10. MySQL学习笔记十二:数据备份与恢复

    数据备份 1.物理备份与逻辑备份 物理备份 物理备份就是将数据库的数据文件,配置文件,日志文件等复制一份到其他路径上,这种备份速度一般较快,因为只有I/O操作.进行物理备份时,一般都需要关闭mysql ...

随机推荐

  1. oracle数据迁移之Exp和Expdp导出数据的性能对比与优化

    https://wangbinbin0326.github.io/2017/03/31/oracle%E6%95%B0%E6%8D%AE%E8%BF%81%E7%A7%BB%E4%B9%8BExp%E ...

  2. mac-command-line-doing

    创建文件夹 mkdir myDirectory 新建文件 touch a.html 编辑文件 vim a.html 删除文件 rm a.html 删除整个文件夹 rm -rf myDirectory ...

  3. bean装配--注解

    1,Dao层 package com.songyan.zhujie; public interface UserDao { public void say(); } package com.songy ...

  4. linux之ssh命令

    ssh命令用于远程登录上Linux主机. 常用格式:ssh [-l login_name] [-p port] [user@]hostname更详细的可以用ssh -h查看. 不指定用户: ssh 1 ...

  5. matlab坐标轴设置

    1. axis([xmin xmax ymin ymax]) 设置当前图形的坐标范围,分别为x轴的最小.最大值,y轴的最小最大值 2. V=axis 返回包含当前坐标范围的一个行向量 3. axis ...

  6. [PWA] Cache JSON Data in a React PWA with Workbox, and Display it while Offline

    We can view the PWA offline because we are caching the static and CDN assets for the app - but the l ...

  7. ANT使用 - 用for和foreach的方法遍历一个文件夹,查找到某个文件并删除

    转自:http://www.cnblogs.com/QAZLIU/p/3732329.html?utm_source=tuicool&utm_medium=referral build.xml ...

  8. javascript - 活动倒计时(天、时、分、秒)

    计数时: 结束时: 示例: <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...

  9. Oracle基础 PL-SQL编程基础(3) 循环结构

    循环结构: 1. LOOP循环结构 语法: LOOP 要执行的语句; EXIT WHEN <条件>   --条件满足则退出循环 END LOOP; 示例:循环输出1-10的整数 DECLA ...

  10. 第14章5节《MonkeyRunner源代码剖析》 HierarchyViewer实现原理-装备ViewServer-查询ViewServer执行状态

    上一小节我们描写叙述了HierarchyViewer是怎样组建ADB协议命令来实现ViewServer的port转发的.在port转发设置好后,下一个要做的事情就是去检測目标设备端ViewServer ...