【Lua】lua内存泄漏

我们游戏开始都是用c++写的,后来写了一半的时候加入了lua,现在有4个模块用lua写的逻辑,类对象都是在模拟器里面创建好,基于tolua将对象和相关方法导入到lua中,然后用lua实现逻辑部分。功能实现之后,昨天开始看看lua逻辑部分有没有内存泄漏,网上查了很多资料,边学习边查找。

luaMonitor这个工具还不错,可以看到lua使用的内存变化以及分配内存的变量和函数等,通过这个我看到我们代码确实有泄露。  仔细阅读代码发现了几个局部变量没有写local确实会造成泄露,但是不停的进出一个功能模块,发现内存会持续增加。说明问题就不只是这么简单了。

网上学习了lua的内存垃圾回收机制,大概是这样的:

名为标志和清扫(Mark-and-Sweep)的方式。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值