JVM整理小结-垃圾收集器

Serial收集器

单线程收集器,只使用一个CPU或者一条收集线程完成垃圾收集工作,在收集的时候“Stop The World”.

优势:在单CPU中,简单高效


ParNew收集器

是Serial收集器的多线程版本,是许多运行在Server模式下的虚拟机中首选的新生代收集器,目前只有ParNew收集器 和 Serial收集器 能与CMS搭配使用。在收集的时候“Stop The World”.


ParallelScavenge收集器

使用复制算法的收集器,是并行的多线程收集器。ParallelScavenge收集器目标是达到一个可控制的吞吐量(Throughput)。

吞吐量=运行用户代码时间 / (运行客户代码时间+垃圾收集时间)

eg:虚拟机总共运行100分钟,垃圾收集花费1分钟,吞吐量就是99%。

Serial Old 收集器

单线程,使用“标记-整理”算法。主要意义被Client模式下的虚拟机使用。如果在Server模式下,两大用途:在JDK1.5.及之前版本与ParallelScavenge收集器搭配使用;作为CMS的后备预案。


Parallel Old 收集器

ParallelScavenge收集器的老年代版本,使用多线程和“标记-整理”算法。在JDK1.6.中开始提供。

在注重吞吐量及CPU资源敏感的场合,可以考虑ParallelScavenge收集器+Parallel Old 收集器


 

CMS收集器

是一种以获取最短回收停顿时间为目标的收集器。重视服务的响应速度,希望系统停顿时间最短,以给用户带来最好的体验。CMS收集器非常符合这类应用的需求。

基于“标记-清除”算法,它的运行过程相对之前几种收集来说更复杂一些,分为4个步骤:

  • 初始标记

  • 并发标记

  • 重新标记

  • 并发清除

初始标记 和 重新标记需要“Stop The World”。

初始标记仅仅只是标记一下GC Roots能直接关联到的对象,速度很快。

并发标记是进行GC Roots Treacing的过程。

重新标记阶段是修改并发标记期间,因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录,该阶段停顿时间一般会比初始化标记阶段稍长,但远比并发标记的时间短。

由于整个过程耗时最长的 并发标记 和 并发清除 过程中,收集器线程都可以与用户线程一起工作,总体上说,CMS收集器的内存回收过程是与用户线程比起并发执行的。


你可能感兴趣的:(JVM整理小结-垃圾收集器)