HotSpot各垃圾收集器的特点

垃圾收集器是内存回收的具体实现,那么HotSpot中有哪些垃圾收集器呢?

Serial 收集器

       是最基本,历史最悠久的收集器,是一个单线程收集器,它在进行垃圾收集时会停止其它所有工作线程,直到收集结束。它是虚拟机运行在Client模式下的默认新生代收集器,它简单而高效,没有线程交互的成本,单线程垃圾收集效率最高,而且在用户桌面应用场景中,分配给虚拟机管理的内存一般不会很大,垃圾回收时停顿的时间完全可以控制在几十、一百多毫秒内,只要不频繁发生,完全可以接受。

  • ParNew 收集器

       是 Serial 收集器的多线程版本,是运行在 Server 模式下的虚拟机中首选的新生代收集器。除了 Serial 收集器,目前是唯一一个 CMS 收集器配合工作的。它默认开启的线程数和 CPU 数量相同。

  • Parallel Scavenge 收集器 

       是一个新生代收集器,使用复制算法,并行的多线程收集器,它的目的是达到可控的吞吐量(就是 CPU 运行用户代码的时间与 CPU 总消耗时间的比值,高的吞吐量代表着高效的利用CPU)。而停顿时间就是牺牲吞吐量和新生代空间换来的。

  • Serial Old 收集器

       是 Serial 收集器的老年代版本,同样是一个单线程收集器使用“标记 - 整理”算法,也是给 Client 模式下的虚拟机使用。

  • Parallel Old 收集器

       是 Parallel Scavenge 收集器的老年代版本,使用多线程和“标记 - 整理”算法。

  • CMS 收集器

       是一种以获取最短回收停顿时间为目标的收集器。基于“标记 - 清除”算法,分为初始标记、并发标记、重新标记、并发清除四个步骤。优点是并发收集、低停顿。但也有三个明显缺点:对 CPU 资源非常敏感、无法处理浮动垃圾,可能会出现“Concurrent Mode Failure”失败而导致另一次 Full GC 产生、“标记 - 清除”算法会导致大量空间碎片的产生,给大对象分配带来麻烦。

  • G1 收集器

       面向服务端的垃圾收集器,与其它垃圾收集器相比,它具有:并行与并发、分代收集、空间整合、可预测的停顿。

猜你喜欢

转载自blog.csdn.net/young_time/article/details/80004447