年轻代的垃圾收集器包含有Serial、ParNew、Parallell,⽼年代则包括Serial Old⽼年代版本、CMS、Parallel Old⽼年代版本和JDK11中的船新的G1收集器。
Serial:单线程版本收集器,进⾏垃圾回收的时候会STW(Stop The World),也就是进⾏垃圾回收的时候其他的⼯作线程都必须暂停
ParNew:Serial的多线程版本,⽤于和CMS配合使⽤
Parallel Scavenge:可以并⾏收集的多线程垃圾收集器
Serial Old:Serial的⽼年代版本,也是单线程
Parallel Old:Parallel Scavenge的⽼年代版本
CMS(Concurrent Mark Sweep):CMS收集器是以获取最短停顿时间为⽬标的收集器,相对于其他的收集器STW的时间更短暂,可以并⾏收集是他的特点,同时他基于标记-清除算法,整个GC的过程分为4步。
1. 初始标记:标记GC ROOT能关联到的对象,需要STW
2. 并发标记:从GCRoots的直接关联对象开始遍历整个对象图的过程,不需要STW
3. 重新标记:为了修正并发标记期间,因⽤户程序继续运作⽽导致标记产⽣改变的标记,需要STW
4. 并发清除:清理删除掉标记阶段判断的已经死亡的对象,不需要STW从整个过程来看,并发标记和并发清除的耗时最⻓,但是不需要停⽌⽤户线程,⽽初始标记和重新标记的耗时较短,但是需要停⽌⽤户线程,总体⽽⾔,整个过程造成的停顿时间较短,⼤部分时候是可以和⽤户线程⼀起⼯作的。
G1(Garbage First):G1收集器是JDK9的默认垃圾收集器,⽽且不再区分年轻代和⽼年代进⾏回收。
网友评论