Java虚拟机收集器之老年代收集器

Serial Old收集器

Serial Old收集器是Serial收集器的老年代版本,同样是一个单线程收集器,使用“标记-整理”算法。这个收集器的主要意义也是在于Client模式下的虚拟机使用。

主要用途:
1、一种用途是在JDK1.5以及之前的版本与Parallel Scavenge收集器搭配使用。
2、另一种用途就是作为CMS收集器的后备预案,在并发收集发生Concurrent Mode Failure时使用。

Parallel Old收集器

Parallel old 是Parallel Scavenge收集器的老年代版本,使用多线程和“标记-整理”算法。这个收集器是JDK6才出现的,在之前Parallel Scavenge一直处于尴尬状态:如图所示

如果新生代选择了Parallel Scavenge 收集器老年代除了选择Serial Old(MSC)之外别无选择。由于老年代Serial Old 在服务端应用的性能上的拖累,使用Parallel Scavenge 不一定能在整体应用上获得吞吐量最大化的效果。直到Parallel Old收集器出现之后,“吞吐量优先”的收集器终于有了名副其实的应用组合在注重吞吐量以及CPU资源敏感的场合,都可以优先考虑Parallel Scavenge 和Parallel Old的组合:

CMS收集器

CMS收集器是一种以获取最短回收停顿时间为目标的收集器。目前很大一部分的Java应用集中在互联网或者B/S的服务器上,这类应用尤其重视服务的相应速度。CMS收集器是基于“标记-清除”算法实现的,他的运作分为四个过程:
1、初始标记
2、并发标记
3、重新标记
4、并发清除
 其中,初始标记、重新标记这两个步骤仍然需要“stop the world”。初始标记仅仅是标记一下GC Roots能直接关联到的对象,速度很快,并发标记阶段就是进行GC roots Tracing的过程。
CMS收集器的运作步骤:

CMS的缺点

  • CMS对收集器对CPU资源非常敏感。
  • CMS无法处理浮动垃圾
  • CMS 是基于“标记-清除”算法的收集器,会产生大量的空间碎片。

猜你喜欢

转载自www.linuxidc.com/Linux/2017-02/140924.htm