标记-清理算法
- 分为标记和清理两个阶段
- 标记出所有需要回收的对象
- 标记完毕后统一进行回收所有被标记的对象
-
效率问题
-
空间问题
产生大量的不连续空间碎片
复制算法 (效率高)
- 将内存划分为大小相同的两块,每次只使用其中一块
- 当这块内存使用完成后,将存活对象,复制到另一块内存中,一次性清理这块内存。
- 这样每次清理内存都是对一半内存空间的回收
标记-整理算法
- 分为标记和整理两个阶段
- 标记出所有需要回收的对象
- 将所有存活的对象向一端移动
- 一次性清理端边界以外的内存
根据收集算法的使用场景
代划分
-
为什么要划分新生代和老年代
- 提高GC收集效率
-
分代垃圾收集算法
-
新生代
-
场景: 每次收集都会有大量对象死去,垃圾收集比较频频繁
-
算法: 复制算法
-
每次只需要付出少量的对象复制成本就可以完成垃圾收集
-
老年代
- 场景: 对象存活机率比较高
- 算法:
- 标记-清理
- 标记-整理
-