0 概述
基础垃圾算法:标记-清除、标记-整理、复制
综合垃圾回收算法:分代收集算法、增量算法
1 标记-清除(Mark-Sweep)
-
标记需要回收的对象
-
清理掉要回收的对象
缺点:垃圾回收之后会存在内存碎片
2 标记-整理(Mark-Compact)
-
标记需要回收的对象
-
把所有的存活对象压缩的内存的一端
-
清理掉边界外的所有空间
这个算法可以避免标记-清除算法会产生的内存碎片
3 复制(Copy)
-
把内存分为两块,每次只使用一块
-
把当前使用的内存中的存活对象复制到未使用的内存中去,然后清除掉正在使用的内存中的所有对象
-
交换两个内存的角色,等待下次回收
4 三种算法对比
回收算法 | 有点 | 缺点 |
---|---|---|
标记-清除 | 实现简单 | 存在内存碎片、分配内存速度会受影响 |
标记-整理 | 无碎片 | 整理内存存在开销 |
复制 | 性能好、无碎片 | 内存利用率低 |
5 分代收集算法
- 把内存分成多个区域,不同区域使用不同的回收算法回收对象
- TODO 细节太多,等会再说
6 增量算法
如果内存非常大,如果一次性回收所有垃圾,势必会消耗很多的时间,从而造成系统长时间停摆。
- 每次只收集一小片区域的内存空间的垃圾