标记清除算法详解(定义优缺及算法图解)

标记清除算法详解(定义优缺及算法图解)-mikechen

标记清除算法属于JVM垃圾回收算法,而且Java面试经常被问,下面我重点详解标记清除算法@mikechen

标记清除算法定义

标记清除算法是JVM垃圾回收算法的一种,是最早出现也是最基础的JVM垃圾回收算法

 

标记清除算法优缺点

标记清除算法优点:

最基础简单的垃圾收集算法,为后续垃圾收集算法奠定了基础,实现起来比较简单。

 

标记清除算法缺点:

  • 内存碎片:标记清除算法回收的内存是不连续的,可能会导致内存碎片问题,进而降低内存使用效率;
  • 垃圾回收效率不高:标记清除算法需要对整个堆进行遍历,因此在堆比较大的情况下,垃圾回收效率较低;
  • 扫描了整个空间两次:第一次:标记存活对象,第二次:清除没有标记的对象;

由于标记清除算法回收的空间是不连续的,容易产生内存碎片,因此在需要频繁分配和释放内存的场景中,标记清除算法的效率会受到影响

 

标记清除算法思想

标记-清除算法将垃圾回收分为两个阶段:标记阶段和清除阶段。

如下图所示:

标记清除算法详解(定义优缺及算法图解)-mikechen

1.标记阶段

从程序的根对象开始,递归遍历所有可以到达的对象,并将它们标记为“可达”的对象。

根对象可以是全局变量、程序的调用栈、寄存器等,在遍历的过程中,将访问到的对象打上标记。

 

2.清除阶段

遍历整个堆,将没有标记的对象,即未被标记为“可达”,视为垃圾并回收其占用的内存。

然后,在清除阶段,清除所有未被标记的对象。

 

标记清除算法适用

标记清除算法适合长时间运行的应用程序,或者是对内存碎片不太敏感的场景。

所以标记清除算法适用于:存活对象较多的情况,比较适用于年老代。

以上就是标记清除算法详解,更多JVM垃圾回收算法,请查看:4种JVM垃圾回收算法详解

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法