Serial收集器:单线程收集器,收集时会暂停所有工作线程(stop the world,简称STW),使用复制收集算法,虚拟机运行在client模式时的默认新生代收集器,最早的收集器,新生代和老年代都可以使用,在新生代采用复制算法,在老年代,采用标记整理算法,因为是单线程,没有多线程切换的额外开销。
ParNew收集器:这是Serial的多线程版本,除了使用多个收集线程外,其余行为包括算法,STW,对象分配规则,回收策略,都和serial收集器一模一样,这种是虚拟机运行在server模式的默认新生代收集器,在单CPU的环境中,ParNew收集器并不会比Serial收集器有更好的效果
Parallel Scavenge收集器:也是一种多线程收集器,也是使用复制算法,但它的对象分配规则和回收策略都与ParNew收集器有所不同,它是以吞吐量最大化(GC时间占总运行时间最小)为目标的收集器实现,它允许较长时间的STW换取总吞吐量最大化
Serial Old收集器:是单线程收集器,使用标记-整理算法,是老年代的收集器
Parallel Old收集器:老年代版本吞吐量优先收集器,使用多线程和标记-整理算法,JVM1.6提供,在此之前,新生代使用了PS收集器的话,老年代除Serial Old别无选择,因为Ps无法和CMS收集器配合工作
CMS收集器:一种以最短停顿时间为目标的收集器,但是它并不能达到GC效率最高(总体GC时间最小),但是可以尽可能降低GC时服务停顿时间,CMS收集器使用的是标记-清除算法,追求最短停顿时间,非常适合web应用,只针对老年代,一般结合ParNew使用,只有在多cpu环境下才有意义
CMS的缺点:1)以牺牲CPU资源的代价来减少用户线程的停顿,当cpu个数少数4的时候,有可能对吞吐量影响非常大,
2)在并发清理过程中,用户线程还在跑,这时候需要预留一部分空间给用户线程,
3)采用标记,清除,会带来碎片问题,碎片过多会容易频繁触发Full GC