Serial 和SerialOld 垃圾回收器
前言
接下来的几篇文章都是介绍垃圾回收器,这里按照经常组合使用的新生代、老年代收集器一起阐述。在JDK1.3.1 之前是Serial 和SerialOld 搭配使用;JDK1.5.0 之后出现了Parallel Scavenge 和 和SerialOld、Serial、Parnew 和CMS、Parallel Scavenge 和Parallel Old组合;JDK1.8 之后根据新的化整为零思想单独使用,分别是G1(Garbage First)、Shenandoah、ZGC 这些组合收集器。随着对算法的优化和演变,先后出现Serial,还是后面的ZGC ,但是他们都遵循垃圾回收器的理论,都是朝着低时延,高吞吐的目标。
Serial 收集器
1. 概述
Serial 是一款使用标记-复制算法
的单线程工作的垃圾回收器 ,而且在工作时必须停掉用户线程STW
直到垃圾结束。运行示意图如下:
2. 特点
-
设计简单; -
在内存受限的环境中,依旧能够高效运行, 因为其是单线程执行,避免了线程切换的开销,更加专注垃圾回收。
3. 使用
-XX:+UseSerialGC
打开后,使用Serial和Serial Old 组合进行垃圾回收。
4. 使用场景
-
桌面级应用:桌面级应用新生代一般在几十到,一两百兆; -
限制单核处理器的场景:Serial 单线程串行执行,没有线程切换开销。
SerialOld 收集器
1. 概述
SerialOld 是一款老年代垃圾回收器,采用标记-整理算法
,单线程运行,而且在工作是会造成STW
,与之搭配的年轻代回收器有Serial
、Parallel Scavenge
,以及CMS回收失败时 的兜底回收方案。
2. 特点
-
设计简单; -
在内存受限的环境中 与Serial 年轻代回收器绝佳搭配。
3. 使用
-
-XX:+UseSerialGC
打开后,使用Serial和Serial Old 组合进行垃圾回收。
4. 使用场景
-
内存有限,单核处理器场景使用; -
在垃圾创建速度大于回收速度时,可以使用Serial Old 回收器作为备份方案。