Skip to content

老年代原理

  1. 工作线程:拼命的产生对象,对象存于eden区。
  2. 年轻代垃圾回收器:年轻代满了,触发YoungGC,把存活对象复制到old区。
  3. 老年代垃圾回收器:先把所有工作线程挂起,所有工作线进入安全点SafePoint后,当前处于STW状态。
  4. GC线程:采用标记整理算法,先标记后整理,主流的垃圾收集算法中有介绍到。

老年代也有Serial算法,因为其只适用于单核CPU因此基本等于被淘汰了。

Parallel Old 老年代垃圾回收器

和年轻代的Parallel类似,性能设计上以高吞吐量为准则,GC为多线程也就是有多个GC同时处理

老年代原理Parallel

CMS 老年代垃圾回收器

由于历代垃圾回收器都是串行或独占或回收的,例如前面3个年轻代回收器 + 2个老年代回收器,都是必须停止工作线程后,GC线程才开始垃圾清除。在这样的大背景下,于2002年JDK1.4.2发布CMS,它是哪个时代第一次实现并发收集器(相对来说),即实现了让垃圾收集线程与用户线程同时工作。

CMS的特色就是停顿时间短(低延迟), 停顿时间越短就越适合用户交互的程序,越能提升用户体验。在G1收集器面世之前,CMS基本都是JVM的标配,甚至是现在市面都是很多系统在使用CMS。