新生代垃圾收集器
- Serial:单线程垃圾收集器,当垃圾收集线程工作时,会导致所有用户线程暂停运行(Stop The World);这会给用户带来很不好的体验,就相当于你的电脑每运行一小时就要暂停响应五分钟,是很不好的体验
- ParNew:是Serial垃圾收集器的多线程并行版本,多线程并行指的是支持多条垃圾回收线程同时运行,但是还是会产生Stop The World;只是可以缩短用户线程暂停响应的时间
- Parallel Scavenge:与ParNew垃圾收集器的区别在于关注点不同,ParNew关注的是如何缩短用户暂停响应的时间,满足更好的用户体验,而Parallel Scavenge关注的是达到一个可控制的吞吐量(吞吐量=用户线程运行时间/(用户线程运行时间+垃圾收集时间)
老年代垃圾收集器
- Serial Old:Serial垃圾收集器的老年代版本
- Parallel Old:Parallel Scavenge垃圾收集器的老年代版本
- CMS:Concurrent Mark Sweep,第一款支持并发的垃圾收集器,并发指的是支持用户线程和垃圾回收线程一起工作,是一种以获取最短回收停顿时间为目标的收集器;使用的GC算法是标记-清除算法;整个阶段包含四个步骤:初始标记-并发标记-重新标记-并发清除;初始标记和重新标记还是需要Stop The World,但是停顿的时间非常短,可以忽略不计,并发标记和并发清除都是支持用户线程和垃圾回收线程一起工作的。CMS收集器的缺点:一、对处理器资源非常敏感;二、无法处理“浮动垃圾”(由于垃圾回收线程工作的时候,用户线程也在工作,因此可能产生新的垃圾,但这些垃圾没有进行标记,只能等待下一次垃圾收集再清理掉,这就是浮动垃圾);三、由于使用的是标记-清除算法,会产生大量的内存碎片,导致大对象无法分配空间
整堆垃圾收集器:G1(Garbage First)
注意:新生代的垃圾收集器使用的GC算法都是标记-复制算法;老年代的垃圾收集器一般使用的GC算法是标记-整理算法,CMS除外,它使用的是标记-清除算法
Serial可以搭配CMS,也可以搭配Serial Old;
ParNew可以搭配CMS,也可以搭配Serial Old;
Parallel Scavenge可以搭配Parallel Old,也可以搭配Serial Old,但是无法搭配CMS