JVM垃圾回收算法各个算法的优缺点

引用计数法、标记清除法、标记压缩法、复制算法、分代算法等。
1.引用计数器法:假设有一个对象A,任何一个对象对A的引用,那么对象A的引用计数器+1,当引用失败时,对象A的引用计数器就-1,如果对象A的引用计数器的值为0,就说明对象A没有引用了,可以被回收。
优缺点:
优点:
1.实时性较高,无需等到内存不够的时候,才开始回收,运行时根据对象的计数器是否为0,来进行回收。
2.在垃圾回收过程中,应用无需挂起,如果申请内存时,内存不足,则立刻报outofmember错误。
3.区域性,更新对象的计数器,只是影响到该对象,不会扫描全部对象。
缺点:
1.每次对象被引用时,都需要去更新计数器,有一点时间开销。
2.浪费CPU资源,即使内存够用,仍然在运行时进行计数器的统计。
3.无法解决循环引用问题。(最大的缺点)
如果a和b两个对象存在相互引用,即使a和b都为null,a和b永远不会被回收。
2.标记清除法
标记:从根节点开始标记引用的对象
清除:未被标记引用的对象就是垃圾对象,可以被清理
优点:解决了引用计数器算法中的循环引用的问题,没有从root节点引用的对象都会被回收
缺点:
1.效率较低,标记和清除两个动作都需要遍历所有的对象,并且在GC时,需要暂停应用程序,对于交互性要求比较高的应用,体验非常差。
2.通过标记清除算法清理出的内存,碎片化比较严重,被回收的对象存在于内存的各个角落,所以清理出来的内存是不连贯的。
3.标记压缩算法
对标记清除算法做了优化,在清理阶段,将存活的对象压缩到内存的一端,然后清理边界以外的垃圾,解决了碎片化的问题。
优点:解决了碎片化的问题
缺点:标记压缩算法多了一步,对象移动内存位置,效率有一定的影响。
4.复制算法
将内存空间一分为二,每次用其中的一块,将正在使用的对象复制到另一个内存空间,清空该内存,交换内存的角色

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值