网站首页 > java教程 正文
标记整理算法的是标记清除算法的基础上有做了‘整理’阶段的操作。也可以看做是标记清除算法的优化。
标记清除算法与标记整理算法步骤对比:
标记清除:标记-清除
标记整理:标记--整理-清除
有关标记清除算法的思想原理请参阅:
【JVM】垃圾回算法-标记清除算法
在前几篇关于垃圾回收算法中,标记复制算法可以说是似乎很完美了,但在真实情况下,有部分地方的对象回收如果使用标记复制算法还是不行的,比如说老年代中的对象。
标记整理算法背景:
大家都知道,堆中对象的存放位置大致有:新生代、老年代,新生代中的对象可以说是朝生夕灭,因此针对与新生代中的对象而言,使用复制算法可以说很合适了。
但是老年代中的对象经过GC巡逻后大多数仍是存活的,此时对老年代对象使用标记复制算法,之前说的关于标记复制算法的缺点弊端都会显现出来--效率低下(因为需要复制的对象变多了)
如果对老年代使用标记清除算法则会有碎片化空间、效率低下等缺点,也不适用到老年代。那这不完犊子了么,老年代中的对象该使用那种算法来回收最好呢?
1970年左右,一种新的垃圾回收算法出现了:
标记-整理(压缩)算法(Mark-Compact)
标记整理算法执行步骤:
1、标记存活对象
该步骤使用根可打算法标记出存活对象。
2、整理存活对象
有序地整理存活对象,在整理的同时,之前对象的在虚拟机栈中的引用地址也发生改变。
3、清除非存活对象
标记整理算法的优缺点:
优点(解决别人的缺点就是自己的优点):
1、(相比于标记清除算法)没有了碎片化内存
2、(相比于标复制算法)没有了内存减半的消耗
缺点:
1、在整理存活对象时,因为对象位置点变动,还需要该调整虚拟机栈中的引用地址
2、在整理存活对象时,需要全程暂停用户线程,STW(Stop The World)
2、效率相比于标记复制算法低一些
--- END ---
关注公众号 Java岛 ,每天进步亿点点,和小编一起学习Java呀!
- 上一篇: 一文讲清四种垃圾回收算法及其优缺点
- 下一篇: 经典技术干货分享:JVM内存模型和垃圾回收机制
猜你喜欢
- 2025-07-23 JVM-垃圾回收算法和垃圾回收器(jvm1.8垃圾回收机制)
- 2025-07-23 经典技术干货分享:JVM内存模型和垃圾回收机制
- 2025-07-23 一文讲清四种垃圾回收算法及其优缺点
- 2025-07-23 JVM垃圾回收算法总结(jvm垃圾回收算法和垃圾回收器)
- 2025-07-23 JVM垃圾回收算法详解(jvm垃圾回收算法原理)
- 2025-07-23 JVM中有哪些垃圾回收算法,每个算法各自的优势及它们之间的区别
- 2025-07-23 聊聊垃圾回收算法(垃圾回收算法手册 pdf)
- 2025-07-23 一文搞懂七种基本的GC垃圾回收算法
- 2025-07-23 JVM(四)垃圾回收的实现算法和执行细节
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)