垃圾收集算法
JVM 中常见的三种垃圾收集算法:
- 标记-清除算法(Mark_Sweep)
- 复制算法(Copying)
- 标记-压缩算法(Marrk_Compact)
当前商业虚拟机的垃圾收集都采用 分代收集算法,根据对象存活周期将内存划分为几块,根据各个年代的特点采用最适当的收集算法。
标记-清除算法
首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象。
缺点:
- 标记的清除的效率都不高
- 清除后产生大量不连续的内存。如果出现需要创建大对象,连续内存空间不够的情况,就需要触发另一次垃圾收集动作
复制算法
将可用内存按容量划分为大小相等的两块,每次只使用其中一块。当一块内存用完了,将还存活的对象复制到另外一块上面,然后将这块的内存空间一次清理掉。
优点:
- 解决了内存碎片问题
缺点:
- 内存缩小为一半,存活对象越多效率越低
标记-整理算法
先标记出要被回收的对象,然后让所有存活的对象向一端移动,然后直接清理掉边界以外的内存。