文章目录
  1. 1. Serial
  2. 2. ParNew
  3. 3. Parallel Scavenge
  4. 4. Serial Old
  5. 5. Parallel Old
  6. 6. CMS
  7. 7. G1
  8. 8. 总结

Serial

Serial是最基本的收集器,历史悠久。是一个单线程收集器,而且它在进行垃圾回收的时候,必须暂停其他所有的工作线程,直到收集结束。这就意味着,每次进行垃圾收集都必须停掉用户正常工作的线程。使用复制算法

ParNew

ParNew是Serial的多线程版本。仍要停顿

Parallel Scavenge

Parallel Scavenge是一个新生代收集器,使用多线程和复制算法。相比其他收集器,只有这个收集器是针对系统吞吐量进行改进,适用于后台运算并且交互不多的程序。其他收集器则更关注改善收集时的停顿时间,适用于用户交互的程序。

Serial Old

Serial Old 是Serial的老年代版本,专门用于收集老年代,采用“标记整理算法”。

Parallel Old

Parallel Old是Parallel Scavenge的老年代版本,使用多线程和“标记整理算法”。

CMS

CMS收集器是一种以获取最短回收停顿时间为目标的收集器,给用用户带来较好的体验,可称之为并发低停顿收集器。基于标记-清除算法实现。可用于新、老代收集,一般用于老年代收集,然后搭配一个新生代收集器(可以是Serial和ParNew)
缺点:

  1. 对CPU资源敏感(因为是并发)。在并发阶段,虽然不会导致用户线程停顿,但是会因为占用了一部分线程(即CPU资源)而导致用户应用程序变慢,总吞吐量降低。
  2. 无法处理浮动垃圾。因为是边收集,边产生垃圾。
  3. 标记-清除算法会产生空间碎片。需要额外碎片整理过程,停顿时间变长。

G1

G1收集器是当前收集器技术发展最前沿的成果。基于标记-整理算法,可以精确控制停顿。基本不牺牲吞吐量的前提下完成低停顿的内存回收。这是由于它将新生代、老年代划分为多个区域,并维护一个每个区域收集的优先列表,保证了在有限的时间内可以获得最高的收集效率。

总结

新生代收集器:Serial、ParNew、Parallel Scavenge
老年代收集器:CMS、Serial Old、Parallel Old
收集器适用场景:

  • 用户交互:ParNew、CMS
  • 高吞吐量:Parallel Scavenge
    哪些收集器可配合使用:
    Serial/Serial Old、Serial/CMS、ParNew/Serial Old、ParNew/CMS、Parallel Scavenge/Parallel Old、Parallel Scavenge/Serial Old、CMS/Serial Old
文章目录
  1. 1. Serial
  2. 2. ParNew
  3. 3. Parallel Scavenge
  4. 4. Serial Old
  5. 5. Parallel Old
  6. 6. CMS
  7. 7. G1
  8. 8. 总结