Java垃圾收集器总结

1、Serial收集器
是一个单线程的收集器、进行垃圾回收时,必须暂停其他所有的线程,直到垃圾回收结束,它依然是运行再Client模式下的新生代收集器;收集方法:新生代采用复制算法,老年代采取标记整理算法。优点,简单高效
2、ParNew收集器:
是Serial收集器的多线程版本版本,它和Serial收集器几乎一样,它是许多运行在Server模式下的虚拟机中首选的新生代收集器,目前只有它可以和CMS一起配合工作,
3、Parallel Scavenge收集器
也是是一个新生代收集器,也是使用复制算法的收集器,又是并行的收集器,看上去和ParNew一样,他特别之处是:它的关注点和别的垃圾收集器不同,CMS等收集器的关注点是尽可能垃圾收集时用户线程的停顿时间;而Parallel Scavenge收集器的目标则是达到一个可控制的吞吐量,所谓吞吐量就是CPU用于运行用户代码的时间与CpU总消耗时间的比值,
停顿时间越短就越适合需要与用户交互的程序,良好的响应速度能提升用户的体验,而高吞吐量则可以高效率的利用CPU时间,尽快完成程序的运算任务,主要适合在后台运算而不需要交互的任务,
4、Serial Old收集器
是一个单线程的收集器,使用标记整理算法;主要也是被Client模式下虚拟机使用;它主要有两大用途:在JDK1.5及之前版本中与Parallel Scavenge收集器配合使用,另外一个就是CMS收集器的后备预案,在并发收集Concurrent Mode Failer的时候使用;

5、Parrel Old收集器
是Parallel Scavenge收集器的老年代版本,使用多线程和标记整理算法,实在JDK1.6中才开始提供的,Parrel Old收集器出现后,“吞吐量优先”收集器终于有了名副其实的应用组合,在注重吞吐量和CPU资源敏感的场合,可以优先考虑Parallel Scavenge+Parrel Old收集器,

6、CMS收集器
是一种获取最短回收停顿时间的为目标的收集器,CMS收集器非常适合与互联网,是基于标注-清除算法实现的分为四个过程:初始标记、并发标记、重新标记、并发清除,其中初始标记、重新标记任然需要Stop the world,初始标记只是标注GC roots能关联到的对象,速度很快,并发标记就是进行GC Roots Tracing的过程,而重新标记是为了修正并发标记期间因用户程序继续运行而导致标记产生变动的那一部分对象的标记记录,CMS收集器的内存回收过程是用户线程一起并发的执行的

优点、并发收集+低停顿,
缺点:CMS收集器对CPU资源非常敏感;CMS无法处理浮动垃圾;收集结束时会产生大量碎片,空间碎片过多时,将会给大对象分配带来很大的麻烦
7、G1收集器
是基于标记-整理算法实现,不会产生碎片,其次是可以非常精确的控制停顿,即能让使用者明确指定在一个长度为M毫秒的时间内,消耗在垃圾收集上的时间不能超过N毫秒,这几乎是实时Java(RTSJ)的垃圾收集的特征,可以实现在基本不牺牲吞吐量的前提下完成低停顿的内存回收,之前的收集器是整个新生代或老年代,而G1将整个堆(包含新生代和老年代)分为多个大小固定的区域,并且跟踪这些区域里的垃圾堆积程度,在后台维护一个优先列表,每次根据允许的收集时间,优先收集垃圾最多的区域,(这也就是Garbage First的由来),区域划分及有优先级的区域回收,保证了G1在有限的时间内可以获得最高的收集效率。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值