指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。
并发(Concurrent)
指用户线程与垃圾收集线程同时执行(但不一定是并行的,可能会交替执行),用户程序在继续运行,而垃圾收集程序运行于另一个CPU上。
吞吐量
CPU用于运行用户代码的时间与CPU总消耗时间的比值,即吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间)。虚拟机总共运行了100分钟,其中垃圾收集花掉1分钟,那吞吐量就是99%。
HotSpot虚拟机的垃圾回收器
Serial
Stop The World
ParNew
- Serial收集器的多线程版本,和Serial的唯一区别就是使用了多条线程去垃圾收集。
- 除了Serial,只有它可以和CMS搭配使用的收集器。
- 用作新生代收集器,复制算法。
Parallel Scavenge
- 用作新生代收集器,复制算法。
- 关注高吞吐量,可以高效率地利用CPU时间,尽快完成程序的运算任务,主要适合在后台运算而不需要太多交互的任务。
-
Parallel Scavenge收集器提供了两个参数用于精确控制吞吐量,分别是控制最大垃圾收集停顿时间的
-XX:MaxGCPauseMillis
参数以及直接设置吞吐量大小的 -XX:GCTimeRatio
参数。
Serial Old
- Serial收集器的老年代版本,单线程,标记-整理 算法。
- 一般用于Client模式的虚拟机。
- 当虚拟机是Server模式时,有2个用途:一种用途是在JDK 1.5以及之前的版本中与Parallel Scavenge收集器搭配使用 ,另一种用途就是作为CMS收集器的后备预案,在并发收集发生Concurrent Mode Failure时使用。
Parallel Old
- Parallel Scavenge收集器的老年代版本,使用多线程和 标记-整理 算法。在JDK 1.6中开始提供。
- 在注重吞吐量的场合,配合Parallel Scavenge收集器使用。
CMS(Concurrent Mark Sweep)
原文
https://juejin.im/post/5b35ec86e51d4558d217ee1e