垃圾回收的五种算法(引用计数法)——小马同学@Tian

垃圾回收的五种算法——引用计数法

1.引用计数法
1.1简介
	引用计数是计算机编程语言中的一种内存管理技术,是指将资源(可以是对象、
内存或磁盘空间等等)的被引用次数保存起来,当被引用次数变为零时就将其
释放的过程。使用引用计数技术可以实现自动资源管理的目的。同时引用计数
还可以指使用引用计数技术回收未使用资源的垃圾回收算法。
1.2运行过程(图解)

在这里插入图片描述

	引用计数法的基本工作原理,即被引用时计数器会+1,取消引用时计数器会-1,当计数器归零时,系统会默认这个变量为无效对象,会进行回收
1.3优点
1)可即刻回收垃圾,每个对象都知道自己的被引用数ref_count,当ref_count为0时,对象就会把自己作为空闲空间连接到空闲链表,也就是,在对象变成垃圾的同时就会被回收,而其它的GC算法只有当分块用尽GC开始执行时,才会知道哪个是垃圾,也就是GC之前会有一部分内存被垃圾占用

2)最大暂停时间短,每次通过指向mutator生成垃圾时,这部分垃圾都会被回收,大幅削减了mutator的最大暂停时间

3)没必要沿指针查找,当我们需要减少沿指针查找的次数是,它就派上用场了
1.4缺点
1)计数器的值增减处理繁重每次指针更新时,计数器的值会被更新,所以在频繁更新指针的mutator中,值的增减处理会变得繁重

2)计数器要占很多位,假如32位的机器,就有可能2的32次方个对象同时引用一个对象,所以必须确保各对象的计数器有32位大小,也就是对于所有的对象,必须留有32位的空间,使内存使用大大降低

3)实现复杂,算法本身简单,但实现复杂,比方说,需要把以往写成*ptr = obj 的地方都要重新写成 update_ptr(ptr,obj)因为调用update_ptr的地方很多,重写过程极易出错

4)循环引用无法回收,就是两个对象相互引用的情况 比如两个对象是同一个类的实例,属性相互赋值(最大缺陷)

######1.5循环引用(图解)
在这里插入图片描述

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值