Serial垃圾收集器


在这里插入图片描述

Serial是最基础、发展历史最悠久的收集器。

Serial:依次的

Serial是一个单线程收集器。这里“单线程”的含义不仅仅说明它只会使用一个CPU或一条收集线程去完成垃圾收集工作,更重要的是,Serial进行垃圾收集的时候,必须暂停其他所有的工作线程,直到它收集结束

在这里插入图片描述

从JDK1.3开始,HotSpot虚拟机开发团队一直在努力消除因为内存回收而导致的用户线程停顿的时间。从Serial收集器到Parallel收集器,再到Concurrent Mark Sweep,乃至G1收集器的出现,用户线程的停顿时间越来越短,但依旧无法消除。

到目前为止,Serial收集器依然是HotSpot虚拟机在Client模式下的默认新生代收集器。在单CPU环境下,Serial收集器由于没有线程交互的开销,可以专心地进行垃圾收集,因此具有最高的单线程垃圾收集效率

在用户端的桌面应用场景下,新生代并不会很大,停顿时间并不会很长,只要GC不过于频繁,停顿时间是可以接收,所以,Serial收集器对于运行在Client模式下的虚拟机来说是一个很好的选择。


《深入理解Java虚拟机》学习笔记

Serial垃圾收集器


在这里插入图片描述

Serial是最基础、发展历史最悠久的收集器。

Serial:依次的

Serial是一个单线程收集器。这里“单线程”的含义不仅仅说明它只会使用一个CPU或一条收集线程去完成垃圾收集工作,更重要的是,Serial进行垃圾收集的时候,必须暂停其他所有的工作线程,直到它收集结束

在这里插入图片描述

从JDK1.3开始,HotSpot虚拟机开发团队一直在努力消除因为内存回收而导致的用户线程停顿的时间。从Serial收集器到Parallel收集器,再到Concurrent Mark Sweep,乃至G1收集器的出现,用户线程的停顿时间越来越短,但依旧无法消除。

到目前为止,Serial收集器依然是HotSpot虚拟机在Client模式下的默认新生代收集器。在单CPU环境下,Serial收集器由于没有线程交互的开销,可以专心地进行垃圾收集,因此具有最高的单线程垃圾收集效率

在用户端的桌面应用场景下,新生代并不会很大,停顿时间并不会很长,只要GC不过于频繁,停顿时间是可以接收,所以,Serial收集器对于运行在Client模式下的虚拟机来说是一个很好的选择。


《深入理解Java虚拟机》学习笔记

ParNew收集器


在这里插入图片描述

ParNew收集器其实就是Serial收集器的多线程版本——使用多条线程进行垃圾收集

Parallel:平行的,并列的

Serial收集器于ParNew收集器工作过程对比:

在这里插入图片描述

在这里插入图片描述

于Serial收集器相比,ParNew收集器除了多线程垃圾收集之外,并没有太多创新之处,但它确实许多运行在Service模式下的虚拟机首选的新生代收集器,一个与性能无关的但很重要的原因是,除了Serial收集器之外,目前只有ParNew收集器可以与CMS收集器配置使用。


《深入理解Java虚拟机》学习笔记

Parallel Scavenge收集器


在这里插入图片描述

Parallel Scavenge收集器也被称为“吞吐量优先收集器”

Serial、ParNew、CMS等收集器的关注点是尽可能缩短GC时用户线程的停顿时间,而Parallel Scavenge收集器的目标是达到一个可控制的吞吐量(Throughout)。
吞吐量=用户代码运行时间/(用户代码运行时间+垃圾收集时间)
吞吐量 = 用户代码运行时间 / (用户代码运行时间 + 垃圾收集时间)


《深入理解Java虚拟机》学习笔记