加权引用计数(weighted reference counting)

Wikipedia上介绍了一种叫weighted reference counting的方法。大概思路是不一定要建一个引用就把引用计数加1,也可以是建一个引用就把引用计数加n,只要销毁引用的时候也减相同的n就能保证语义一致。这个n就是引用权重,引用计数其实是所有引用权重的总和。

具体做法是创建首个引用的时候,初始化引用权重为一个很大的值(例如:2^16)。从这个引用创建新引用的时候将这个权重分为两份,一半留给原引用,一半分给新引用。这个地方并不需要更新对象的引用计数。

如果当要分裂的引用权重为1时,重新向对象申请比较大的计数权重。

当引用销毁的时候引用计数减去对应的权重,当引用计数为0则说明对象已经没有引用了,可以安全的释放内存。

结论

这种整存零取的方式,优点是创建新引用的时候不需要更新引用计数,减少了线程同步的次数。当然销毁引用还是要同步的。

和朴素的引用计数一样,也是有循环引用的问题。

转载于:https://my.oschina.net/chunquedong/blog/3038056

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值