小议C#引用类型对象在循环引用时会不会内存泄漏

循环引用指的是A引用了B,而B又引用了A。在写代码的时候,都难免会这样写:地图引用了战斗单位,战斗单位又引用了地图。。

 如图:(来源于国外大神的解释)

当A没有再被其他类引用,则A,B,C都应该被垃圾回收。如果判断该对象是否需要被回收的依据是基于引用计数的,那上面代码就会是这样:B被C和A引了,引用计数为2,C被B引了,引用计数为1,这样内存就泄露了。

 

所以C#的GC并没有用引用计数。GC有一些“根”,对象都挂在上面。从“根”往其子结点进行遍历,就可以标注出哪些对象是被使用的。A对象没有被其他引用,A作为B,C的入口,所以A,B,C都变成了被回收的对象。

 

综上,C#在做循环引用的时候是不会出现垃圾回收问题的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值