「JVM」垃圾回算法-标记整理算法

标记整理算法的是标记清除算法的基础上有做了‘整理’阶段的操作。也可以看做是标记清除算法的优化。

标记清除算法与标记整理算法步骤对比:

标记清除标记-清除

标记整理标记--整理-清除

有关标记清除算法的思想原理请参阅:

【JVM】垃圾回算法-标记清除算法

在前几篇关于垃圾回收算法中,标记复制算法可以说是似乎很完美了,但在真实情况下,有部分地方的对象回收如果使用标记复制算法还是不行的,比如说老年代中的对象。


标记整理算法背景:

大家都知道,堆中对象的存放位置大致有:新生代、老年代,新生代中的对象可以说是朝生夕灭,因此针对与新生代中的对象而言,使用复制算法可以说很合适了。

但是老年代中的对象经过GC巡逻后大多数仍是存活的,此时对老年代对象使用标记复制算法,之前说的关于标记复制算法的缺点弊端都会显现出来--效率低下(因为需要复制的对象变多了)

如果对老年代使用标记清除算法则会有碎片化空间、效率低下等缺点,也不适用到老年代。那这不完犊子了么,老年代中的对象该使用那种算法来回收最好呢?

1970年左右,一种新的垃圾回收算法出现了:

标记-整理(压缩)算法(Mark-Compact)


标记整理算法执行步骤:

1、标记存活对象

该步骤使用根可打算法标记出存活对象。

2、整理存活对象

 有序地整理存活对象,在整理的同时,之前对象的在虚拟机栈中的引用地址也发生改变。

3、清除非存活对象


 标记整理算法的优缺点:

优点(解决别人的缺点就是自己的优点):

1、(相比于标记清除算法)没有了碎片化内存

2、(相比于标复制算法)没有了内存减半的消耗

缺点:

1、在整理存活对象时,因为对象位置点变动,还需要该调整虚拟机栈中的引用地址

2、在整理存活对象时,需要全程暂停用户线程,STW(Stop The World)

2、效率相比于标记复制算法低一些

--- END ---

关注公众号 Java岛 ,每天进步亿点点,和小编一起学习Java呀!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bearx...

请作者喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值