2024年5月27日发(作者:)
标记清除算法和标记整理算法
一、标记清除算法
算法原理:标记清除算法的核心思想是通过追踪对象引用的可达性,
标记出所有存活的对象,并将其标记为可达。然后,清除未标记的内存块,
释放那些不再可达的对象所占用的内存。
步骤如下:
1.遍历所有的根对象,将其标记为可达。
2.从根对象出发,递归地遍历所有可达的对象,将其标记为可达。
3.所有未被标记的对象即为垃圾对象,可被回收。
优点:
1.算法简单,实现容易。
2.不需要移动对象,避免了内存碎片的产生。
缺点:
1.回收后的可用内存不连续,容易造成内存碎片。
2.回收过程中需要停止程序的执行,产生停顿,影响用户体验。
标记整理算法是一种改进的垃圾回收算法。它在标记清除算法的基础
上,进一步优化内存碎片的问题。
算法原理:与标记清除算法类似,标记整理算法也是通过标记可达的
对象,然后清除未标记的对象。不同的是,标记整理算法在回收的同时会
进行内存整理的操作,将存活的对象顺序紧凑地排列,从而减少内存碎片
的产生。
步骤如下:
1.遍历所有的根对象,将其标记为可达。
2.从根对象出发,递归地遍历所有可达的对象,将其标记为可达。
3.将堆中的所有对象根据其标记状态进行整理,将未标记的对象移动
到堆的末尾,而标记的对象则向前移动。
优点:
1.减少内存碎片的产生,提高内存利用率。
2.实现相对复杂,但相比其他垃圾回收算法,效果更好。
缺点:
1.回收过程中需要停止程序的执行,产生停顿,影响用户体验。
2.内存整理操作需要消耗额外的时间和计算资源。
总结:
标记清除算法和标记整理算法都是常用的垃圾回收算法,旨在自动管
理动态分配的内存。标记整理算法在标记清除算法的基础上加入了内存整
理的操作,减少了内存碎片的产生。尽管回收过程中会产生停顿,但两种
算法都是非常高效的。在使用垃圾回收算法时,开发人员应根据具体的应
用需求和资源限制选择合适的算法。


发布评论