NOTE

7.7 2.垃圾回收算法

1. 标记清除 垃圾回收分成两个阶段 - 标记: 从GC Root出发,标记所有可达的对象。未被标记的就是垃圾对象 - 清除: 清除所有未被标记的对象 1.1. 特点 - 会产生内存碎片(不连续的内存空间), 需要分配较大的对象时,无法找到足够的连续内存空间。 2. 标记整理 分标记和整理阶段。 -

Java创建于 更新于 historical

这是历史学习笔记,可能存在过时或不完整的理解。

1. 标记清除

垃圾回收分成两个阶段

  • 标记: 从GC Root出发,标记所有可达的对象。未被标记的就是垃圾对象
  • 清除: 清除所有未被标记的对象

1.1. 特点

  • 会产生内存碎片(不连续的内存空间), 需要分配较大的对象时,无法找到足够的连续内存空间。

2. 标记整理

分标记和整理阶段。

  • 标记: 同上
  • 整理: 把所有存活的对象移动到一边,对其他区域回收

2.1. 特点

解决了内存碎片的问题,但是移动对象的成本较高

3. 复制

把内存空间分成两块,每次只使用其中一块,用完之后把存活的对象复制到另一块内存空间

3.1. 特点

效率高,没有内存碎片 每次只能利用一半的空间

4. JVM实际采用的垃圾回收算法:分代收集

根据对象的存活时间把内存分成新生代和老年代

  • 新生代的特点是每次回收只有少量对象存活,因此采用改进的复制算法 改进的复制算法把内存空间分为Eden和Survivor区(8:1:1),只有10%的空间被浪费
  • 老年代的特点是有大量对象存活,采用标记清除、标记整理算法

5. 参考链接