文章转载自:http://blog.csdn.net/xufeng0991/article/details/44775661

垃圾回收的目的是要释放掉不再被使用变量所占用的内存。

Lua的垃圾收集机制使用了名为标志和清扫(Mark-and-Sweep)的方式。默认情况下,所有变量都标记为“可回收”,回收是从根节点_G出发,可达的对象标记为“不可回收”,然后回收没有被标记为“不可回收”的变量。

一 回收机制

基础的Mark-and-Sweep算法是最古老的解决循环引用情况垃圾收集算法之一。
顾名思义,这是一个two phases的算法,可用很简单的文字描述:
(1)Mark phase(标志阶段)
1> 每个可被gc的对象都拥有一个标志位,初始为0(unmarked)。
2> 定义程序中第一层可访问的对象集合为 根对象集合(root set)。
3> 递归遍历根集合中所有对象的引用关系,如果某对象标志位为unmarked,
则标志为1(marked)。

(2)Sweep phase(清扫阶段)
1> 遍历所有现存的对象:将标志位还是unmarked的对象释放;
同时将标志为marked的对象重新标志为unmarked,为下次gc做准备。

二 回收函数
1 相关功能
collectgarbage函数提供了多项功能:
停止垃圾回收;
重启垃圾回收;
强制执行一次回收循环;
强制执行一步垃圾回收;
获取Lua占用的内存;
以及两个影响垃圾回收频率和步幅的参数。

2 函数原型:
collectgarbage(opt,[,arg])

3 参数说明:
"stop" 停止垃圾收集器,如果它的运行。

"restart" 如果垃圾收集器已经停止,将重新启动它。

"collect" 执行一次全垃圾收集循环,默认执行此操作。

"count" 返回当前Lua中使用的内存量(以KB为单位)

"step" 单步执行一个垃圾收集。
步长 "Size" 由参数arg指定 (大型的值需要多步才能完成),
如果要准确指定步长,需要多次实验以达最优效果。
如果步长完成一次收集循环,将返回True。

"setpause" 设置 arg/100 的值作为暂定收集的时长,并返回设置前的值。默认为200。
控制了收集器在开始一个新的收集周期之前要等待多久。 随着数字的增大就导致收集器工作工作的不那么主动。 小于 1 的值意味着收集器在新的周期开始时不再等待。 当值为 2 的时候意味着在总使用内存数量达到原来的两倍时再开启新的周期。

"setstepmul" 设置 arg/100 的值。
作为步长的增幅(即新步长=旧步长*arg/100);并返回设置前的值。默认为200。
控制了收集器的工作速度,这个速度是一个相对于内存分配的速度。
更大的数字将导致收集器工作的更主动的同时,也使每步收集的尺寸增加。
小于 1 的值会使收集器工作的非常慢,可能导致收集器永远都结束不了当前周期。
缺省值为200%,这意味着收集器将以内存分配器的两倍速运行。

参考:
http://www.douban.com/group/topic/16897102/

http://www.2cto.com/kf/201502/377646.html

http://www.lua.org/manual/5.1/manual.html#pdf-collectgarbage

lua的垃圾回收机制相关推荐

  1. Lua中的垃圾回收机制

    遇到问题: 在运行lua脚本时,出现下面报错说内存不足: >lua -e "io.stdout:setvbuf 'no'" "最大值最小值检查.lua" ...

  2. 详细介绍Java垃圾回收机制

    垃圾收集GC(Garbage Collection)是Java语言的核心技术之一,之前我们曾专门探讨过Java 7新增的垃圾回收器G1的新特性,但在JVM的内部运行机制上看,Java的垃圾回收原理与机 ...

  3. JAVA中的垃圾回收机制以及其在android开发中的作用

    http://blog.csdn.net/xieqibao/article/details/6707519 这篇文章概述了JAVA中运行时数据的结构,以及垃圾回收机制的作用.在后半部分,描述了如何检测 ...

  4. 图解 Java 垃圾回收机制,写得非常好!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 原文:https://www.oracle.com/webfold ...

  5. 详解JVM内存管理与垃圾回收机制2 - 何为垃圾

    随着编程语言的发展,GC的功能不断增强,性能也不断提高,作为语言背后的无名英雄,GC离我们的工作似乎越来越远.作为Java程序员,对这一点也许会有更深的体会,我们不需要了解太多与GC相关的知识,就能很 ...

  6. Python3.5源码分析-垃圾回收机制

    Python3源码分析 本文环境python3.5.2. 参考书籍<<Python源码剖析>> python官网 Python3的垃圾回收概述 随着软硬件的发展,大多数语言都已 ...

  7. 深入浅出Java垃圾回收机制

    2019独角兽企业重金招聘Python工程师标准>>> 对于Java开发人员来说,了解垃圾回收机制(GC)有哪些好处呢?首先可以满足作为一名软件工程师的求知欲,其次,深入了解GC如何 ...

  8. Java 垃圾回收机制,13张图给你讲清楚!

    作者:Rhys_Lee 等等等 https://blog.csdn.net/zl1zl2zl3/article/details/90904088 什么是自动垃圾回收? 第一步:标记 第二步:清除 压缩 ...

  9. 安卓 java内存碎片_理解Android Java垃圾回收机制

    Jvm(Java虚拟机)内存模型 从Jvm内存模型中入手对于理解GC会有很大的帮助,不过这里只需要了解一个大概,说多了反而混淆视线. Jvm(Java虚拟机)主要管理两种类型内存:堆和非堆. 堆是运行 ...

最新文章

  1. LaTeX写作技术规范
  2. 二分查找的实现---java版本
  3. Redis 基本操作
  4. 3月15日云栖精选夜读:双管齐下,MaxCompute数据上云与生态
  5. varnish 高性能方向代理服务器
  6. jquery-选择器-筛选器
  7. GCD中的队列与任务
  8. Burp Suite如何拦截GET请求提交POET请求的参数
  9. 中文信息处理——语料划分测试集与训练集
  10. Ubuntu 16.04服务器 配置
  11. 致第一次安装(yong)小小输入法的你
  12. maven使用java8
  13. 腾讯云推出“版权音乐助手”让音乐版权使用“按量付费“
  14. 8237A DMA控制器简答
  15. 不规则多边形重心求解
  16. 程序员如何通过兼职赚钱?有哪些渠道?
  17. Java中多继承的实现
  18. 如何修改视频尺寸而不让画面变形?
  19. 一加7t人脸识别_一加7pro有人脸识别吗一加7和一加7pro的区别
  20. 全球部分免费开放的电子图书馆

热门文章

  1. 渗透测试工具-瑞士军刀NC
  2. MySQL数据库练习2
  3. 面向对象概念粗浅理解
  4. 如何替换 JavaScript 中所有出现的字符串
  5. 联想笔记本电脑休眠后无法唤醒的解决方法
  6. 一个基于腾讯云实时音视频的SDKdemo
  7. 常用的数据标准化方法
  8. python pyz_Python pyzgoubi包_程序模块 - PyPI - Python中文网
  9. Java、Android工具整理 - 单位换算
  10. Xcode 用Ad_Hoc方式打包