天天看点

java gc minor gc_minor gc 会发生stop the world 现象吗?

概述

HotSpot虚拟机所有的垃圾收集器如下图:

HotSpot 所有垃圾收集器

上面有7种收集器,分为部分,上面为新生代收集器,下面是老年代收集器。如果两个收集器之间存在连线,就说明它们可以搭配使用。

新生代的收集器使用复制算法,

老年代使用并发标记清除(CMS)或标记-整理算法。

一丶Stop The World

Java中Stop-The-World机制简称STW,是在执行垃圾收集算法时,Java应用程序的其他所有线程都被挂起(除了垃圾收集帮助器之外)。Java中一种全局暂停现象,全局停顿,所有Java代码停止,native代码可以执行,但不能与JVM交互。

解释:

并行(Parallel):多条垃圾收集线程并行工作,而用户线程仍处于等待状态

并发(Concurrent):垃圾收集线程与用户线程一段时间内同时工作(交替执行)

二丶Serial(串行GC)收集器

Serial收集器是一个新生代收集器,单线程执行,使用复制算法。它在进行垃圾收集时,必 须暂停其他所有的工作线程(用户线程)。是Jvm client模式下默认的新生代收集器。对于限定单个CPU的环境来说,Serial收集器由于没有线程交互的开销,专心做垃圾收集自然可以获得最高的单 线程收集效率。

Serial收集器

三丶ParNew(并行GC)收集器

ParNew收集器其实就是serial收集器的多线程版本,除了使用多条线程进行垃圾收集之外,其余行为与Serial收集器一样。

到这里,就可以解释题主的问题了:暂停所有用户线程,即Stop The World,在Parnew 当中也就是Minor Gc 当中会发生