lua的垃圾回收机制
文章转载自: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的垃圾回收机制相关推荐
- Lua中的垃圾回收机制
遇到问题: 在运行lua脚本时,出现下面报错说内存不足: >lua -e "io.stdout:setvbuf 'no'" "最大值最小值检查.lua" ...
- 详细介绍Java垃圾回收机制
垃圾收集GC(Garbage Collection)是Java语言的核心技术之一,之前我们曾专门探讨过Java 7新增的垃圾回收器G1的新特性,但在JVM的内部运行机制上看,Java的垃圾回收原理与机 ...
- JAVA中的垃圾回收机制以及其在android开发中的作用
http://blog.csdn.net/xieqibao/article/details/6707519 这篇文章概述了JAVA中运行时数据的结构,以及垃圾回收机制的作用.在后半部分,描述了如何检测 ...
- 图解 Java 垃圾回收机制,写得非常好!
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 原文:https://www.oracle.com/webfold ...
- 详解JVM内存管理与垃圾回收机制2 - 何为垃圾
随着编程语言的发展,GC的功能不断增强,性能也不断提高,作为语言背后的无名英雄,GC离我们的工作似乎越来越远.作为Java程序员,对这一点也许会有更深的体会,我们不需要了解太多与GC相关的知识,就能很 ...
- Python3.5源码分析-垃圾回收机制
Python3源码分析 本文环境python3.5.2. 参考书籍<<Python源码剖析>> python官网 Python3的垃圾回收概述 随着软硬件的发展,大多数语言都已 ...
- 深入浅出Java垃圾回收机制
2019独角兽企业重金招聘Python工程师标准>>> 对于Java开发人员来说,了解垃圾回收机制(GC)有哪些好处呢?首先可以满足作为一名软件工程师的求知欲,其次,深入了解GC如何 ...
- Java 垃圾回收机制,13张图给你讲清楚!
作者:Rhys_Lee 等等等 https://blog.csdn.net/zl1zl2zl3/article/details/90904088 什么是自动垃圾回收? 第一步:标记 第二步:清除 压缩 ...
- 安卓 java内存碎片_理解Android Java垃圾回收机制
Jvm(Java虚拟机)内存模型 从Jvm内存模型中入手对于理解GC会有很大的帮助,不过这里只需要了解一个大概,说多了反而混淆视线. Jvm(Java虚拟机)主要管理两种类型内存:堆和非堆. 堆是运行 ...
最新文章
- LaTeX写作技术规范
- 二分查找的实现---java版本
- Redis 基本操作
- 3月15日云栖精选夜读:双管齐下,MaxCompute数据上云与生态
- varnish 高性能方向代理服务器
- jquery-选择器-筛选器
- GCD中的队列与任务
- Burp Suite如何拦截GET请求提交POET请求的参数
- 中文信息处理——语料划分测试集与训练集
- Ubuntu 16.04服务器 配置
- 致第一次安装(yong)小小输入法的你
- maven使用java8
- 腾讯云推出“版权音乐助手”让音乐版权使用“按量付费“
- 8237A DMA控制器简答
- 不规则多边形重心求解
- 程序员如何通过兼职赚钱?有哪些渠道?
- Java中多继承的实现
- 如何修改视频尺寸而不让画面变形?
- 一加7t人脸识别_一加7pro有人脸识别吗一加7和一加7pro的区别
- 全球部分免费开放的电子图书馆