Serial收集器
缺点
- 单线程收集器
- GC时必须停止所有其它工作线程,直到垃圾收集结束
优点
- 在单cpu环境下,单线程垃圾收集效率高
- 在用户的桌面场景中,分配给jvm的的内存一般来说不会很大,收集几十兆甚至一两百兆的新生代内存,停顿时间可以控制在最多一百多毫秒内
- 适合client模式下的虚拟机
ParNew收集器
这个垃圾收集器时Serial收集器的多线程版本,除了使用多条线程进行垃圾收集外,其余行为包括Serial可用的所有控制参数、收集算法、Stop The World,对象分配规则、回收策略等都与Serial收集器完全一样。
另外,如果老年代使用CMS收集器,那新生代就只有Serial和ParNew收集器可以和CMS收集器配合。
Parallel Scavenge收集器
新生代收集器,和ParNew收集器一样也是并行收集器。
这款收集器的特点是它关注的点与其它收集器不同。CMS等收集器关注的是尽可能缩短垃圾收集时用户线程的停顿时间,而ParNew的目标是达到一个可控制的吞吐量。吞吐量=运行用户代码时间 / (运行用户代码时间 + 垃圾收集时间)。停顿时间越短越适合与用户交互的程序,而高吞吐量可以高效的利用CPU时间,尽快完成运算任务,所以ParNew收集器适合用在后台运算居多的场景。
和ParNew的另一个区别是,这款收集器提供一个-XX:+UseAdaptiveSizePolicy参数,这是一个开关参数,当这个参数打开之后,就不需要手工指定新生代的大小,Eden和Survivor区的比例、晋升老年代对象年龄等细节参数了,虚拟机会根据当前系统的运行情况收集性能监控信息,动态调整这些参数以提供最合适的停顿时间或者最大的吞吐量,这种调节方式成为GC自适应的调节策略。但是还是要指定一些基本的参数,例如-Xmx(设置最大堆内存),然后设置MaxGCPauseMillis参数(更关注最大停顿时间)或TCTimeRatio(更关注吞吐量)参数给虚拟机设置一个优化目标。
减少最大停顿时间的代价是调小新生代的内存空间,这虽然可以减少用户停顿时间,但是垃圾收集的频率会升高,吞吐量也会下降。
Serial Old收集器
Parallel Old收集器
CMS收集器
先说下并发和并行的区别,并发是指垃圾回收线程和用户线程同时执行(或交替执行),并行是指垃圾回收线程同时执行,但用户线程暂停执行。
G1收集器
新生代和老年代垃圾收集器的搭配
垃圾收集器参数总结
理解GC日志