JVM之垃圾收集器与内存分配模型(二)

113 阅读1分钟

1.1标记清除算法

第一步:标记(找出内存中需要回收的对象,并且把它们标记出来)

第二步:清除(清除掉被标记需要回收的对象,释放出对应的内存空间)

缺点:

(1)执行效率不稳定,标记和清除两个过程的执行效率都随对象数量增长而降低。

(2)会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需要分配较大对象时,无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作。

1.2标记复制算法

将内存划分为两块相等的区域,每次只使用其中一块。当其中一块内存使用完了,就将还存活的对象复制到另外一块上面,然后把已经使用过的内存空间一次清除掉。

缺点:空间浪费严重

1.3标记整理算法

标记整理算法和标记清除算法非常像,不同点在于标记之后,清除算法是直接对对象进行回收,整理算法是让所有存活的对象向内存空间一端移动,然后直接清理掉边界以外的内存区域。

缺点:站在老年代这种每次回收都有大量对象存活区域,移动对象并更新所有引用这些对象的地方将会是一种极为负重的操作。