NOTE
7.7 2.垃圾回收算法
1. 标记清除 垃圾回收分成两个阶段 - 标记: 从GC Root出发,标记所有可达的对象。未被标记的就是垃圾对象 - 清除: 清除所有未被标记的对象 1.1. 特点 - 会产生内存碎片(不连续的内存空间), 需要分配较大的对象时,无法找到足够的连续内存空间。 2. 标记整理 分标记和整理阶段。 -
这是历史学习笔记,可能存在过时或不完整的理解。
1. 标记清除
垃圾回收分成两个阶段
- 标记: 从GC Root出发,标记所有可达的对象。未被标记的就是垃圾对象
- 清除: 清除所有未被标记的对象
1.1. 特点
- 会产生内存碎片(不连续的内存空间), 需要分配较大的对象时,无法找到足够的连续内存空间。
2. 标记整理
分标记和整理阶段。
- 标记: 同上
- 整理: 把所有存活的对象移动到一边,对其他区域回收
2.1. 特点
解决了内存碎片的问题,但是移动对象的成本较高
3. 复制
把内存空间分成两块,每次只使用其中一块,用完之后把存活的对象复制到另一块内存空间
3.1. 特点
效率高,没有内存碎片 每次只能利用一半的空间
4. JVM实际采用的垃圾回收算法:分代收集
根据对象的存活时间把内存分成新生代和老年代
- 新生代的特点是每次回收只有少量对象存活,因此采用改进的复制算法 改进的复制算法把内存空间分为Eden和Survivor区(8:1:1),只有10%的空间被浪费
- 老年代的特点是有大量对象存活,采用标记清除、标记整理算法