Jvm老年代垃圾收集器

Jvm老年代垃圾收集器教程

Jvm 老年代垃圾收集器可以分为:Serial Old 收集器、Parallel Old 收集器和 CMS(Concurrent Mark Sweep) 收集器。

Serial Old收集器详解

定义

Serial Old 是 Serial 收集器的老年代版本,它同样是一个单线程收集器,使用了 “标记-整理” 算法。垃圾回收一般不会直接跳到老年代回收的,一般情况下是会和新生代垃圾收集器一起使用。它一般和 Serial 收集器一起使用。

运行效果图

12_Serial Old 收集器运行效果图.png

Parallel Old收集器详解

定义

Parallel Old 是 Parallel Scavenge 收集器老年代版本,使用多线程和 “标记-整理” 算法。它也是吞吐量优先收集器。充分的利用了 CPU 的处理能力。一般情况下和 Parallel Scavenge 收集器 一起使用。

运行效果图

13_Parallel Old 收集器运行效果.png

CMS(Concurrent Mark Sweep)收集器详解

定义

CMS 收集器是一种以获取最短回收停顿时间为目标的收集器。它是基于 “标记-清除” 算法实现的,所以会产生许多空间碎片。分为 4 个步骤:

步骤名称 是否并发 具体操作内容
初始标记 Stop The World 只标记一下 GC Roots 能直接关联到的对象。
并发标记 GC 线程和业务线程并发执行 执行 GC Roots Tracing 的过程。
重新标记 Stop The World 修正并发期间因为用户线程继续执行,导致初始标记的那部分对象的变动
并发清除 GC 线程和业务线程并发执行 清除那些垃圾对象

运行效果图

14_CMS 收集器运行效果图.png

注意

CMS 收集器是以低停顿为目标,而 Parallel Scavenge 收集器收集器是以吞吐量为目标,两个垃圾收集器是不同的架构,所以两个不能够并用,在多 CPU 环境中,CMS 收集器一般与 ParNew 收集器一起使用的场景比较多。