SerialGC 串行回收器

这是最古老同时也是最稳定的回收回收器,使用该回收器时,新生代老年代都使用串行回收器。新生代使用复制算法,老年代使用标记-压缩算法。
使用:

-XX+UseSerailGC

ParNewGC

该回收器是SerialGC的并行版本,在新生代中将进行并发回收。
使用:

-XX+UseParNewGC

ParallelGC

该回收器是新生代并行,老年代串行。
使用:

-XX+UseParallelGC

还有一个ParallelOldGC,该回收器在老年代也使用并行回收,同时更加关注吞吐量。

CMS

Concurrent Mark Sweep 并发标记清除。这是一个老年代回收器,使用此回收器时新生代将默认使用ParNewGC,
使用:

-XX:+UseConcMarkSweepGC

该回收器GC的过程:

1:初始标记(非并发)

这个过程将标记根可以直接关联的对象,速度比较快。

2:并发标记(并发)

标记全部对象

3:重新标记(非并发)

4:并发清除

JVM的Stop the World

进行GC时会出现全局停顿,所有Java代码停止,但native代码可以执行,但不能和JVM交互

Stop the World多半是由GC引起的,还有Dump线程,死锁检查,堆Dump等。