专业的JAVA编程教程与资源

网站首页 > java教程 正文

「JVM」垃圾回算法-标记整理算法(垃圾回收机制与jvm结构)

temp10 2025-07-23 18:06:14 java教程 4 ℃ 0 评论

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

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

「JVM」垃圾回算法-标记整理算法(垃圾回收机制与jvm结构)

标记清除标记-清除

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

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

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

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


标记整理算法背景:

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

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

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

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

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


标记整理算法执行步骤:

1、标记存活对象

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

2、整理存活对象


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

3、清除非存活对象


标记整理算法的优缺点:

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

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

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

缺点

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

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

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

--- END ---

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

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表