您的位置:首页 > 其它

HotSpot垃圾收集器

2017-07-21 11:20 239 查看


图3-5展示了7种作用于不同分代的收集器,如果两个收集器之间存在连线,就说明它们 可以搭配使用。虚拟机所处的区域,则表示它是属于新生代收集器还是老年代收集器。

1. Serial收集器

这个收集器是一个单线程的收集器,用于虚拟机新生代的收集。”单线程”的意义不仅仅说明它只会使用一个cpu或者一条收集线程去完成垃圾收集工作。而且它在垃圾收集的过程中,必须暂停其他的所有工作线程,直到收集结束。



优点:简单而高效(与其他收集器的单线程比),Serial收集器由于没有线程交互的开销,专心做垃圾收集自然可以获得最 高的单线程收集效率。。在用户的桌面应用场景中,分配给虚拟机管理的内存一般来说不会很 大,收集几十兆甚至一两百兆的新生代(仅仅是新生代使用的内存,桌面应用基本上不会再 大了),停顿时间完全可以控制在几十毫秒最多一百多毫秒以内,只要不是频繁发生,这点 停顿是可以接受的。所以,Serial收集器对于运行在Client模式下的虚拟机来说是一个很好的选择。

2.ParNew收集器

ParNew收集器就是Serial的多线程版本,除了使用多条线程进行垃圾收集之外,其余行为包括Serial收集器的控制参数,收集算法,对象分配规则,回收策略都与Serial完全一样。这两种收集器共用了很多代码。



ParNew是运行在Server模式下虚拟机中首选的新生代收集器,其中一个与性能无关但很重要的原因是:除了ParNew收集器以外,只有Serial收集器能和CMS收集器配合工作。

ParNew收集器在单CPU的环境中绝对不会有比Serial收集器更好的效果,甚至由于存在 线程交互的开销,该收集器在通过超线程技术实现的两个CPU的环境中都不能百分之百地保 证可以超越Serial收集器

3.Parallel Scavenge收集器

Parallel Scavenge收集器是一个新生代收集器,它也是使用复制算法的收集器,又是并行 的多线程收集,和ParNew不同的是,Parallel Scavenge收集器的目标则是达到 一个可控制的吞吐量。所谓吞吐量就是CPU用于运行用户代码的时间与CPU总 消耗时间的比值,即吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间),虚 拟机总共运行了100分钟,其中垃圾收集花掉1分钟,那吞吐量就是99%。

4.Serial Old收集器

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



5. Parallel Old收集器

Parallel Old是Parallel Scavenge收集器的老年代版本,使用多线程和“标记-整理”算法。



6.CMS收集器

CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集 器。目前很大一部分的Java应用集中在互联网站或者B/S系统的服务端上,这类应用尤其重 视服务的响应速度,希望系统停顿时间最短,以给用户带来较好的体验。CMS收集器就非常 符合这类应用的需求。

,CMS收集器是基于“标记—清除”算法实现 的,它的运作过程相对于前面几种收集器来说更复杂一些,整个过程分为4个步骤,初始标记,并发标记,重新标记,标记清除。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: