• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Lua的GC机制

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

GC分析:

lua中GC采用的是标记-清除法,即一次GC分为2步

1:从根结点遍历GC对象,如果可达则标记

2:遍历所有的GC对象,清除所有未被标记的对象

二色标记法

lua5.1之前采用的GC算法,缺点是GC的时候不能被打断,所以会严重卡住主线程

三色标记法:

lua5.1后采用三色标记法

白色:在gc开始阶段,所有的对象都为白色,当遍历了一次后,任为白色,则删除白色

灰色:灰色应用在分布遍历阶段,如果有对象为灰色,则遍历就不会停止

黑色:被引用的对象,设为黑色,不会被删除,当GC完后被重置为白色

 

GC api:

(自动调用GC:当lua使用的内存到达阀值)

(该api为手动调用GC)

collectgarbage([opt [, arg]])

opt参数可以为:

  • “collect”:执行一个完整的垃圾回收周期,这是一个默认的选项
  • “stop”:停止垃圾收集器(如果它在运行),实现方式其实就是将gc.threshold设置为一个巨大的值,不再触发gc step操作
  • “restart”:将重新启动垃圾收集器(如果它已经停止)。
  • “count”:返回当前使用的的程序内存量(单位是Kbytes),返回gc->total/1024
  • “step”:执行垃圾回收的步骤,这个步骤的大小由参数arg(较大的数值意味着较多的步骤),如果这一步完成了一个回收周期则函数返回true。
  • “setpause”:设置回收器的暂停参数,并返回原来的暂停数值。该值是一个百分比,影响gc.threshold的大小,即影响触发下一次gc的时间,设置代码如下:

    g->gc.threshold = (g->gc.estimate/100) * g->gc.pause;

    g->gc.estimate为当前实际使用的内存的大小,如果gc.pause为200,则该段代码表示,设置gc的阈值为当前实际使用内存的2倍

  • “setstepmul”:设置回收器的步进乘数,并返回原值。该值代表每次自动step的步长倍率,影响每次gc step的速率,具体这么影响可以查看后面小节

参考:https://www.cnblogs.com/gangtie/p/12724295.html


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Visual Studio Lua和C#交互之开发环境配置发布时间:2022-07-22
下一篇:
【原】COCOS2D—LUA获取剪贴板内容发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap