垃圾回收算法.

十种GC回收器

GC垃圾回收算法 和 GC回收器 (二)

Serial 回收器

  • 单线程收集
  • 针对新生代
  • 使用复制算法
  • 会产生较长时间的停顿(Stop the world),进行垃圾收集时,必须暂停所有工作线程,直到完成
  • 不会产生线程切换的开销
    GC垃圾回收算法 和 GC回收器 (二)

Serial Old 回收器

  • 老年代单线程回收
  • 使用标记整理算法

Parallel Scavenge回收器

jdk 1.8默认的垃圾回收器

  • 多线程并行回收
  • 新生代回收器,采用复制算法
  • 追求高吞吐量,充分利用CPU资源【吞吐量优先】
  • 进行垃圾收集时,必须暂停所有工作线程,直到完成

GC垃圾回收算法 和 GC回收器 (二)

Parallel Old回收器

  • 老年代多线程回收
  • 使用标记整理算法

ParNew回收器

  • 多线程并行回收
  • 新生代回收器,采用复制算法
    ParNew收集器是Serial收集器的多线程版本,许多运行在Server模式下的虚拟机中首选的新生代收集器,除Serial外,只有它能与CMS收集器配合工作。

CMS 回收器

  • 并发低停顿收集器
  • 使用标记清除算法
    • 四个阶段
      • 初始标记 (标记GC Roots可以直接关联的对象,速度很快)
      • 并发标记 (进行GC Roots Tracing,判断对象是否存活)
      • 重新标记 (校准并发标记对象的存活状态)
      • 并发清除 (回收标记的对象)
    • 初始标记和重新标记仍然需要Stop The World
    • CMS缺点
      - 由于并发带来的CPU资源消耗
      - 由于并发收集在回收过程中产生的浮动垃圾无法清除
      - 使用标记清除算法带来的空间碎片问题

GC垃圾回收算法 和 GC回收器 (二)

G1回收器

  • 使用分代垃圾回收策略。
  • 新特性:使用分区算法。使内存不再连续。
  • 支持很大的堆,高吞吐量。

相关文章: