信息
· 文章中可能会出现一些错误,希望大佬们可以在评论区指出;
13-垃圾回收
Lua语言通过垃圾收集(Garbage Collection,后文简称GC)自动删除成为垃圾的对象,把程序员从手动内存管理的大坑中解放出来。在某些对性能要求极其苛刻的场合中可能需要程序员去手动控制垃圾收集器,因此还是要对Lua的GC机制有一定的了解。
弱引用表(Weak Table),析构器(Finalizer)和函数collectgarbage()是程序员在Lua语言中用来辅助GC的主要机制:
- 弱引用表允许收集Lua语言中还可以被程序访问的对象;
- 析构器允许收集不在垃圾收集器直接控制下的外部对象;
- 函数
collectgarbage()允许程序员控制垃圾收集器的步长;
弱引用表
TODO,暂时用不到
析构器
TODO,暂时用不到
垃圾收集器
简要原理
接下来简述Lua各版本采用/新增的GC机制:
TODO,暂时无需了解
collectgarbage()
该函数是Lua垃圾回收器的通用接口,第一个参数为指定操作类型的字符串,第二个参数可选,需要搭配第一个参数的操作使用。各个操作参数如下表所示:
| 操作参数 | 作用 | 返回值 |
|---|---|---|
"collect" | 执行一次完整的GC操作,也是操作参数的默认值 | 无 |
"count" | 返回Lua当前使用的总内存量,单位KB且含小数 | 内存使用量 |
"stop" | 停止垃圾回收器,直到调用"restart" | 无 |
"restart | 重启垃圾回收器 | 无 |
"step" | 执行一步GC操作,第二个才是表示希望完成的工作量 | 本次完成一次GC循环返回true |
"setpause" | 设置间歇率为参数/100,用于控制新一次GC前的等待时机 | 返回旧值 |
"setstepmul" | 设置步进倍率为参数/100,用于控制GC相对内存分配的工作速度 | 返回旧值 |
参考资料
- 《Lua程序设计 (第4版)》
- 【唐老狮】Unity热更新之Lua语法