java老年代垃圾回收器

Serial Old收集器(-XX:+UseSerialOldGC , 标记-整理算法)

  1. 单线程收集,进行垃圾收集时,必须暂停所有的工作线程
  2. 简单高效,Client模式下默认的老年代收集器

java老年代垃圾回收器

Parallel Old收集器(-XX:+UseParallelOldGC , 标记-整理算法 JDK6之后)

  1. 多线程,吞吐量优先

java老年代垃圾回收器

CMS收集器(-XX:+UseConcMarkSweepGC , 标记-清除算法)

老年代收集器的半壁*,几乎能与用户线程同时工作

  1. 初始标记:stop-the-world
  2. 并发标记:并发追溯标记,程序不会停顿(与用户线程同时并行)
  3. 并发预清理:查找执行并发标记阶段从新生代晋升到老年代的对象
  4. 重新标记:暂停虚拟机,扫描CMS堆中的剩余对象(这一步也需要stop-the-world)
  5. 并发清理:清理垃圾对象,程序不会停顿
  6. 并发重置:重置CMS收集器的数据结构

java老年代垃圾回收器

G1收集器(-XX:+UseG1GC , 复制+标记-整理算法)

Garbage First收集器的特点(老年代和新生代都能用)

  1. 并行和并发;
  2. 分代收集;
  3. 空间整合;
  4. 可预测的停顿;

Garbage First收集器

  1. 将整个Java堆内存划分成多个大小相等的Region
  2. 新生代和老年代不在物理隔离

解析:Eden region和Survivor region组成新生代;当Eden满了之后,会执行新生代GC回收,把数据从Eden 复制到 Survivor中
java老年代垃圾回收器