C#和Lua的内存管理

首先二者都是有自动GC的功能,C#是有CLR在保障下运行的,CLR的功能除了GC还有保证运行安全等。

C#中数据类型分为值类型和引用类型,值类型存储在栈上,在程序运行一段时间后栈上内存会自动释放,无需CLR管理,引用类型存储在堆上,需要CLR管理并且通过GC来减少内存负担。

C#垃圾回收的过程如下:

1.暂停进程中的所有线程,避免线程在CLR检测期间访问堆内存。

2.GC的标记阶段,托管堆会默认所有对象都是垃圾,都是可回收的对象,然后检查每个对象是否有引用,如果没有引用就会纳入对象图中。

3.垃圾回收阶段,遍历对象图,对所有没有标记的对象进行回收,执行清理

4.碎片整理阶段,对剩下所有保有引用的对象进行内存压缩整理,相应的引用地址也会调整,避免内存碎片。

除此之前,C#进行垃圾回收还有另一个辅助进制,就分代GC,分代GC的基本思路是对象越新,生命周期越短,反之越长,通过分代,调整不同代的垃圾回收的频率,从而可以提高GC的效率。

 

lua中垃圾回收机制是Mark And Sweep算法,对所有对象进行一次是扫描,并标记所有没有被引用的对象,然后清除所有垃圾。

与C#垃圾回收机制相比,没有内存压缩整理和分代GC的机制,容易产生垃圾碎片,需要在使用过程中注意。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值