JVM有关知识---垃圾收集(二)

垃圾收集器

一、serial收集器

      Serial收集器是最基本,发展历史最悠久的收集器。Serial收集器是单线程的收集器,它只会使一个线程去做垃圾收集工作,不仅如此,在做收集工作时,会在后台暂停用户的所有线程,正所谓“Stop The World”。这不仅是serial的问题,所有的垃圾收集器都会有这个问题,只不过区别在于越优秀的收集器,暂停的时间就越短,但是依旧无法完全消除。

      Serial是client模式下默认的新生代收集器,它的最大的好处是:简单高效。在一个cpu下没有多线程交互的开销,专心的做垃圾收集。并且在桌面的程序上虚拟机管理的内存也不会很大,所以停顿时间很短,可以让人接受。

 

二、parNew

       parNew收集器只是serial收集器的一个多线程版本,回收策略与控制参数都与serial相同。但是它是许多server模式下新生代首选的垃圾收集器,原因就是因为当老年代选用CMS收集器的时候,新生代只能选用serial或者是parNew收集器,CMS无法与parallel Scavenge收集器配合使用。

      parNew在单cpu的情况下,不会比serial效果更好,而且还会产生多线程交互的开销。

 

三、Parallel Scavenge收集器

      ParallelScavenge收集器是一个新生代的收集器,也是用复制算法实现,并发多线程。他与其他收集器的区别在于,Parallel Scavenge收集器的关注点在于吞吐量(吞吐量=运行代码时间/(运行代码时间+垃圾收集时间))。高吞吐量可以提高cpu使用效率,适合后台运算,必须要太多交互的任务。

      ParallelScavenge提供了两个参数控制吞吐量:

-XX:MaxGCPauseMillis      控制最大垃圾收集停顿时间

-XXGCTimeRatio           直接设置吞吐量大小

      自适应调节策略:Parallel Scavenge提供了一个参数-XX:UseAdaptiveSizePolicy,当此开关打开后,虚拟机就会根据但是计算机性能监控的信息动态的调整最合适的停顿时间和吞吐量大小。

 

四、Serial Old收集器

       Serial Old收集器是serial收集器的一个老年代版本,同样是一个单线程的收集器,用标记-整理算法实现。

 

五、Parallel Old收集器

       Parallel Old收集器是ParallelScavenge收集器的一个老年代版本,是多线程收集器,也会是标记-整理算法实现。它的存在意义在于,当新生代选用了ParallelScavenge收集器后,老年代只能用Serial Old收集器,在server模式下,使用Serial Old收集器非常不适合,所以如果选用Parallel Old收集器与ParallelScavenge组合可以在注重吞吐量以及CPU资源敏感的场合下使用。

 

六、CMS收集器

       CMS收集器是基于“标记—清除”算法实现的,它是一种以获取最短时间停顿的收集器。它的运作过程总共分为4部:

1、 初始标记

2、 并发标记

3、 重新标记

4、 并发清除

         初始标记与重新标记在工作时依旧会暂停用户的其他进程,但是速度回非常快。初始标记仅仅标记一下“GC Root”可以直接关联的对象,并发标记是进行GC Root Tracing 的过程,重新标记是记录并发标记时产生变化的对象。

 CMS收集器主要优点是:并发收集、低停顿。缺点有:

1、 对CPU资源非常敏感。随着CPU的减少,CMS对用户的影响就会越来越大。

2、 CMS无法清除浮动垃圾。浮动垃圾是指在CMS进行并发清除的过程中,新产生的垃圾,这部分CMS是不发清理的,只能等待下一次的清理工作。

3、 因为CMS是运用“标记—清除”算法实现的,所以当收集结束后会产生大量的内存空间碎片,当碎片过多,导致对象无法存进来的时候就会产生下一次的清理。为了解决这个问题,CMS提供了一个开关参数:-XX:UseCMSCompactAtFullColltion,这个参数是默认开启的,当要进行Full GC时就会先整理一下内存,但是整理内存不能并发进行,所以又有了另外一个参数:-XX:CMSFullGCsBeforeCompaction,这个参数用来设置当进行多少次的不压缩不压缩Full GC后来一次压缩,默认为零,就是每一次都要压缩。

 

七、G1收集器

             G1是目前最优秀的一款收集器,有如下特点:

1、           并行与并发:使用多个CPU或核来缩短暂停时间,有的需要有停顿线程的GC,G1依旧可以让它并发执行。

2、           分代收集:G1不需要别的收集器配合,但是依旧采用不同的方式处理新生代和老年代。

3、           空间整合:G1从整体看是基于“标记—整理”算法,但是局部是基于“复制”算法的,所以不会产生空间碎片。

4、           可预测的停顿

             G1收集器虽然还保留着老年代与新生代的概念,但是他们已经不是物理隔离的了,G1将内存划分为很多个大小相等的区域(Region),并且追踪Region里面垃圾堆积的大小(回收所获得的空间大小以及回收所需时间的经验值),在后台维护一个优先列表,优先回收价值最大的区域。

   G1运作大致可分为下列几个步骤:

1、 初始标记

2、 并发标记

3、 最终标记

4、 筛选回收

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值