所谓的Stop the World机制,简称STW,即在执行垃圾收集算法时,Java应用程序的其他所有除了垃圾收集收集器线程之外的线程都被挂起。

此时,系统只能允许GC线程进行运行,其他线程则会全部暂停,等待GC线程执行完毕后才能再次运行。

这些工作都是由虚拟机在后台自动发起和自动完成的,是在用户不可见的情况下把用户正常工作的线程全部停下来,这对于很多的应用程序,尤其是那些对于实时性要求很高的程序来说是难以接受的。


除了垃圾回收外,还有一些其他的操作会触发STW。


并发(CMS)收集器:(-XX:+UseConcMarkSweepGC):用于对年老代进行回收。

串行收集和并行收集在进行垃圾回收工作时,需要暂停整个运行环境,因此,系统在垃圾回收时会有明显的暂停,并且暂停时间会因为堆越大而越长。

并发收集器可以保证大部分工作都并发执行,应用不暂停,这个垃圾收集器适用于尽可能减少应用的停顿时间,减少full gc发生的几率利用和应用程序线程并发的垃圾回收线程来标记清除年老代,适用于响应时间优先的系统(比较常用,适用于较大型的系统)。

CMS并非没有暂停,而是用两次短暂停来替代串行标记整理算法的长暂停。