2024年5月27日发(作者:)

标记清除算法和标记整理算法

一、标记清除算法

算法原理:标记清除算法的核心思想是通过追踪对象引用的可达性,

标记出所有存活的对象,并将其标记为可达。然后,清除未标记的内存块,

释放那些不再可达的对象所占用的内存。

步骤如下:

1.遍历所有的根对象,将其标记为可达。

2.从根对象出发,递归地遍历所有可达的对象,将其标记为可达。

3.所有未被标记的对象即为垃圾对象,可被回收。

优点:

1.算法简单,实现容易。

2.不需要移动对象,避免了内存碎片的产生。

缺点:

1.回收后的可用内存不连续,容易造成内存碎片。

2.回收过程中需要停止程序的执行,产生停顿,影响用户体验。

标记整理算法是一种改进的垃圾回收算法。它在标记清除算法的基础

上,进一步优化内存碎片的问题。

算法原理:与标记清除算法类似,标记整理算法也是通过标记可达的

对象,然后清除未标记的对象。不同的是,标记整理算法在回收的同时会

进行内存整理的操作,将存活的对象顺序紧凑地排列,从而减少内存碎片

的产生。

步骤如下:

1.遍历所有的根对象,将其标记为可达。

2.从根对象出发,递归地遍历所有可达的对象,将其标记为可达。

3.将堆中的所有对象根据其标记状态进行整理,将未标记的对象移动

到堆的末尾,而标记的对象则向前移动。

优点:

1.减少内存碎片的产生,提高内存利用率。

2.实现相对复杂,但相比其他垃圾回收算法,效果更好。

缺点:

1.回收过程中需要停止程序的执行,产生停顿,影响用户体验。

2.内存整理操作需要消耗额外的时间和计算资源。

总结:

标记清除算法和标记整理算法都是常用的垃圾回收算法,旨在自动管

理动态分配的内存。标记整理算法在标记清除算法的基础上加入了内存整

理的操作,减少了内存碎片的产生。尽管回收过程中会产生停顿,但两种

算法都是非常高效的。在使用垃圾回收算法时,开发人员应根据具体的应

用需求和资源限制选择合适的算法。