HotSpot虚拟机垃圾收集器
上图展示了7种作用于不同分代的收集器,如果两个收集器之间存在连线,就说明它们可以搭配使用。虚拟机所处的区域,则表示它是属于新生代收集器还是老年代收集器。
Serial收集器
线程模式:单线程
特性:简单高效
收集算法:复制算法
适用场景:虚拟机运行在Client模式
运行示意图:
ParNew收集器
线程模式:多线程
特性:简单、高效、并发
收集算法:复制算法
适用场景:虚拟机运行在多CPU的Server模式(唯一能够与CMS收集器配合使用的新生代并发收集器)
运行示意图:
Parallel Scavenge收集器
线程模式:多线程
特性:可控吞吐量
收集算法:复制算法
适用场景:后台运算但不需要太多交互的任务
运行示意图:
Serial Old收集器
线程模式:单线程
特性:简单、高效
收集算法:标记-整理算法
适用场景:Client模式下的虚拟机使用;Server模式下,其一,用于jdk1.5以前版本中与Parallel Scavenge收集器搭配使用;其二,作为CMS收集器的后备预案,在并发收集反生Concurrent Mode Failure时使用。
运行示意图:
Parallel Old 收集器
线程模式:多线程
特性:
收集算法:标记-整理算法
适用场景:可以配合Parallel Scavenge收集器使用,在注重吞吐量以及CPU资源敏感的场合,可以优先考虑Parallel Scavenge 与Parallel Old收集器
运行示意图:
CMS(Concurrent Mark Sweep)收集器
线程模式:多线程
特性:并发收集、低停顿
收集算法:标记-清除算法
适用场景:重视服务的响应速度,希望系统停顿时间最短。
运行示意图:
G1(Garbage-First)收集器
线程模式:多线程
特性:并行与并发,分代收集,空间整合,可预测的停顿
收集算法:标记-清除算法
适用场景:重视服务的响应速度,希望系统停顿时间最短。
运行示意图:
相关概念
并行:指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。
并发:指用户线程与垃圾收集线程同时执行(但不一定是并行的,可能会交替执行),用户程序在 继续运行,而垃圾收集程序运行于另一个CPU上
吞吐量:CPU用于运行用户代码的时间与CPU总消耗时间的比值,即吞吐量=运行用户代码时间/ (运行用户代码时间+垃圾收集时间),高吞吐量可以高效率的利用CPU时间,尽快完成程序的运算任务