java中常见的垃圾回收算法解析

1标记清除算法

2复制算法

3标记压缩算法

4分代收集算法

1,标记清除算法
算法分为标记和清除两个阶段,首先标记出要被回收的对象,在标记完成之后,统一回收被标记的对象:这个算法的缺点就是会产生很多不连续的内存碎片和效率不高等问题,如图:
在这里插入图片描述
2.复制算法
为了解决效率问题,复制算法出现了,他是将内存分为大小相同的两块,每次只使用其中一块,当一块的内存使完之后,就将他还存活的对象复制给另一块,然后清理使用的这一块,这样,每次回收的就是内存的一半。如图
在这里插入图片描述
3.标记整理算法
这个算法是标记清除算法的升级,标记过程仍然与“标记-清除”算法一样,但后续步骤不是直接对可回收对象回收,而是让所有存活的对象向一段移动,然后直接清理掉端边界以外的内存。
在这里插入图片描述
4.分代收集算法
当前虚拟机的垃圾收集都采用分代收集算法,这种算法没有什么新的思想,只是根据对象存活周期的不同将内存分为几块。一般将java堆分为新生代和老年代,这样我们就可以根据各个年代的特点选择合适的垃圾收集算法。
比如在新生代中,每次收集都会有大量对象死去,所以可以选择复制算法,只需要付出少量对象的复制成本就可以完成每次垃圾收集。而老年代的对象存活几率是比较高的,而且没有额外的空间对它进行分配担保,所以我们必须选择“标记-清除”或“标记-整理”算法进行垃圾收集。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值