JVM垃圾回收算法
# JVM垃圾回收算法
# 一、分代收集理论
目前主流的虚拟机都是使用分代收集算法,根据对象存活周期,将java堆分为新生代和老年代
新生代(99%对象朝生夕死) 使用 标记-复制算法
老年代 使用 标记-清除算法 或 标记-整理算法
# 二、回收算法
# 1、标记-复制算法
它将内存划分为大小相同的两块,每次只使用其中的一块。当这一块的内存使用完后,就将还存活的对象复制到另一块内存中,然后再把使用的空间一次清理掉。
# 2、标记-清除算法
它分为“标记”和“清除”两个阶段:标记存活的对象, 回收未被标记的对象
但是会带来两个明显的问题:
1、效率问题 (如果需要标记的对象太多,效率不高)
2、空间问题(标记清除后会产生大量不连续的空间碎片)
# 3、标记-整理算法
标记阶段与“标记-清除”算法一样,但是后续步骤不是直接对可回收对象进行回收,而是让所有存活的对象向一端移动,然后直接清理掉端边界以外的内存