JVM之垃圾收集器

垃圾收集器

常用的四种垃圾收集器:Serial GC、Paralle收集器、Mostly-Concurrent收集器、Garbage-First收集器。

1.Serial GC

  新生代采用复制收集算法,老年代中采用标记清楚压缩算法,它的minor GC和Full GC都是以Stop-The-World方式(即收集时应用程序停止运行)。只有等垃圾收集结束后,应用程序才会继续执行。该收集方式适应大多数对停顿时间要求不高和在客户端运行的应用。

2、Parallel 收集器(ThroughPut收集器)

  新生代采用Stop-The-World方式收集,而老年代采用标记-压缩方式,然而minor GC和Full GC都是并行的,需要高吞吐量的应用,最极端情况下,Full GC引入的Stop-The-World停顿时间依然需要满足需求的应用,以及运行在多处理器系统上的应用。

 

3、Mostly-Concurrent 收集器:低延迟为先

  它管理新生代的方式与Parallel收集器和Serial收集器相同,而它在老年代尽可能并发执行,每个垃圾收集周期只有2次短的停顿,与Paralle收集器相比,CMS老年代停顿变短(有时很可观),但代价是新生代停顿略微拉长,吞吐量有所降低,堆的大小有所增加,并且由于并发,垃圾收集还会占用应用的CPU周期,需要快速响应的应用从中受益,像这样的应用非常多。

4、Garbage-First 收集器:CMS替代者

  G1是一个并行,并发和增量式压缩低停顿的垃圾收集器,长远来看是为了替代CMS,它的不同在于把Java堆分成相同尺寸的块。G1也是分代,但整体上没有划分新生代和老年代,相反,每代是一组区域,这使得它可以灵活地调整新生代。G1垃圾收集是将区域中的存活对象转移到另外一些区域,然后收集前者。

  大部分时候只收集新生代区域(这些形成G1的新生代),它们相当于minor GC,G1也定期执行并发标记,以标识那些空的或几乎空的非新生代区域。这些是收集效率最高的区域。(即G1以最少的代价回收最空的区域),它们是定期被回收,优先回收垃圾对象最多的区域。

  Serial收集器 Paralle收集器 CMS收集器 G1收集器
是否并行
是否并发
新生代收集器 串行 并行 并行 并行
老年代收集器 串行 并行 并行和并发 并行和并发
posted @ 2016-07-01 17:22  TingJie  阅读(195)  评论(0编辑  收藏  举报