Lua中的GC垃圾回收机制

本文探讨了Lua中的GC垃圾回收机制,重点分析了Mark-sweep算法的工作原理及其在Lua中的应用。文章指出,Lua的GC策略是在内存分配超过上次GC后两倍时触发,而早期版本的GC会导致明显的系统停顿问题。此外,还讨论了Mark-sweep算法如何处理对象引用,以及在Lua 5.0中遇到的问题。
摘要由CSDN通过智能技术生成

Lua中的GC垃圾回收机制

对于内存的管理,是程序在应用的时候的必需知识点,而lua内置的GC机制,你了解咩?
先从一个点分析

1. GC原理算法分析

不同的语言,
对GC算法的设计不同,常见的GC算法是引用计数和Mark-Sweep算法,
c#采用的是Mark-sweep && compact算法,
Lua采用的是Mark-sweep算法:
**引用计数算法:**在一个对象被引用的情况下,将其引用计数加1,反之则减1,如果计数值为0,则在GC的时候回收,这个算法有个问题就是循环引用。适合在与c++,不过,lua 的底层也是c++实现的

2.Lua的 GC的开始

GC 的性能表现对整个系统的性能表现影响重大。Go 语言早期就是因为 GC 问题而饱受诟病。如果我们把 GC 关闭,那么 CPU 就完全没有额外开销,但是会有极大的内存开销;如果我们每次分配新对象都运行一遍 GC ,那么就不会有任何额外的内存开销,但是 CPU 开销会完全不可接受(现在 Lua 保留着一个宏开关,可以不停的运行完整的 GC ,用来测试 GC 实现的正确性)。Lua 5.0 采用的是一个折中的方案:每当内存分配总量超过上次 GC 后的两倍,就跑一遍新的 GC 流程。但 Lua 5.0 这种会把整个虚拟机都停下来的 (Stop the World )的简单粗暴的 GC 实现,在实

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值