垃圾回收器

Serial收集器

新生代:复制算法,暂停所有用户线程
老年代:标记整理算法
垃圾回收器_第1张图片

ParNew收集器

新生代:复制算法,暂停所有用户线程,GC多线程
老年代:标记整理算法
垃圾回收器_第2张图片

Parallel Scavenge收集器

新生代:复制算法,暂停所有用户线程,GC多线程

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

Parallel Scavenge目标是达到一个可控制的吞吐量

Serial Old收集器

Serial Old是Serial收集器老年代版本

垃圾回收器_第3张图片

Parallel Old收集器

Parallel Old是Parallel Scavenge收集器老年代版本垃圾回收器_第4张图片

CMS收集器

CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器,包括:

  • 初始标记
  • 并发标记
  • 重新标记
  • 并发清理

垃圾回收器_第5张图片
缺点:

  • CMS收集器对CPU资源非常敏感。会因为占用一部分线程(或CPU资源)而导致应用程序变慢
  • CMS无法处理浮动垃圾。由于CMS并发清理用户线程还运行着,伴随程序运行自然就还会有新的垃圾不断产生,这一部分垃圾出现在标记过程之后,CMS无法当次收集中处理,只好留待下次GC收集时再清理。这一部分垃圾成为浮动垃圾
  • CMS基于标记清除算法实现,会有大量空间碎片产生。

如果CMS的后台线程无法获得完成他们任务所需的CPU资源,或者如果堆变得过度碎片化,以至于无法找到连续空间分配对象,CMS就蜕化到Serial收集器的行为:暂停所有应用线程,使用单线程回收,整理老年代空间。

虽然主要的并发回收阶段都使用后台线程进行工作,有些阶段还是会暂停所有的应用线程,并因此引入短暂的停顿。

初始标记阶段,会暂停所有的应用程序线程。

G1收集器

G1收集器特点:

  • 并行与并发
  • 分代收集
  • 空间整合(不会有空间碎片)
  • 可预测的停顿

垃圾回收器_第6张图片

所有的垃圾算法在对新生代进行垃圾回收时,都存在时空停顿现象。

G1垃圾收集器是一种工作在不同分区上的并发收集器,分区(region)既可以归属于老年代,也可以归属于新生代(默认情况下,一个堆被划分成2048个分区)

你可能感兴趣的:(性能调优)