标记清除算法属于JVM垃圾回收算法,而且Java面试经常被问,下面我重点详解标记清除算法@mikechen
标记清除算法定义
标记清除算法是JVM垃圾回收算法的一种,是最早出现也是最基础的JVM垃圾回收算法。
标记清除算法优缺点
标记清除算法优点:
最基础简单的垃圾收集算法,为后续垃圾收集算法奠定了基础,实现起来比较简单。
标记清除算法缺点:
- 内存碎片:标记清除算法回收的内存是不连续的,可能会导致内存碎片问题,进而降低内存使用效率;
- 垃圾回收效率不高:标记清除算法需要对整个堆进行遍历,因此在堆比较大的情况下,垃圾回收效率较低;
- 扫描了整个空间两次:第一次:标记存活对象,第二次:清除没有标记的对象;
由于标记清除算法回收的空间是不连续的,容易产生内存碎片,因此在需要频繁分配和释放内存的场景中,标记清除算法的效率会受到影响
标记清除算法思想
标记-清除算法将垃圾回收分为两个阶段:标记阶段和清除阶段。
如下图所示:
1.标记阶段
从程序的根对象开始,递归遍历所有可以到达的对象,并将它们标记为“可达”的对象。
根对象可以是全局变量、程序的调用栈、寄存器等,在遍历的过程中,将访问到的对象打上标记。
2.清除阶段
遍历整个堆,将没有标记的对象,即未被标记为“可达”,视为垃圾并回收其占用的内存。
然后,在清除阶段,清除所有未被标记的对象。
标记清除算法适用
标记清除算法适合长时间运行的应用程序,或者是对内存碎片不太敏感的场景。
所以标记清除算法适用于:存活对象较多的情况,比较适用于年老代。
以上就是标记清除算法详解,更多JVM垃圾回收算法,请查看:4种JVM垃圾回收算法详解
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》