2. 垃圾收集器

HotSpot的七个垃圾收集器

JVM-垃圾回收器

1. Serial

JVM-垃圾回收器

用于新生代

串行,单线程的执行垃圾回收,会出现STW

使用复制算法

优点:

  • 在单个CPU下,单线程,没有线程切换的开销,因此效率高

不足:

  • 会出现STW(stop the world)

2. ParNew(serial+多线程)

JVM-垃圾回收器

用于新生代

serial的多线程版本

采用复制算法

只有他能和CMS连用(除了serial)

3. Parallel Scavenge

JVM-垃圾回收器

用于新生代

多线程

采用复制算法

与其他垃圾收集器不同的是,ps目标是实现高吞吐量,而其他垃圾收集器目标是尽快缩短STW的时间

吞吐量:运行用户代码的时间/(运行用户代码的时间+垃圾收集的时间)

用于后台计算,不需要太多用户交互的任务

4. Serial Old

Serial的老年代版本

采用标记整理算法

单线程

作为CMS收集器的后备方案,当出现Concurrent Mode failure时使用

5. Parallel Old

Parallel Scavenge的老年版本

采用标记整理算法

多线程

吞吐量优先

6. CMS

JVM-垃圾回收器

CMS(Concurrent Mark Swep)

采用标记清除算法

四个步骤

  • 初始标记:标记一下GC Roots能直接关联到的对象,速度很快,会出现STW
  • 并发标记:进行GC Roots Tracing的过程,耗时最长,不会出现STW(因为是并行的)
  • 重新标记:因为是并发标记,所有要修正并发过程中发生变化的那部分对象,会出现STW
  • 并发清除:采用标记清除算法进行清除,不会出现STW

7. G1

逻辑上分区,物理上不分区

基于标记整理算法,相比于CMS来说,不会产生碎片

在不牺牲吞吐量的前提下,实现低停顿垃圾回收

相关文章: