常用的垃圾收集器

垃圾收集器

 

   垃圾收集算法是内存回收的方法论,垃圾收集器就是内存回收的具体实现。Java虚拟机规范中没有对垃圾收集器应该如何实现并没有任何规定。这里讨论的收集器基于Sun HotSpot虚拟机1.6版Update 22。针对具体引用场景选择最合适的收集器。

  

  1 Serial 收集器

 

       Serial 收集器是最基本,最历史悠久的收集器。它在垃圾收集的时,必须暂停其他的所有工作-Stop the World,直到它收集结束。

      

       在单个CPU环境下,Serial 收集器由于没有哦线程交互的开销,专心做垃圾收集可以获得最高的单线程收集效率。Serial 收集器对于运行在Client模式下的虚拟机来说是个很好的选择。

     

 

  2 ParNew 收集器

 

       ParNew 收集器其实就是Serial 收集器的多线程版本,作为一个老年代收集器。

      

       ParNew收集器是许多运行在Server模式下的虚拟机中的首选新生代收集器。除了Serial 收集器外,目前只有它与CMS收集器配合工作。

      

 

  3 Parallel Scavenge收集器

 

       Parallel Scavenge收集器也是一个新生代收集器,使用复制算法的收集器,并行的多线程收集器。

 

       Parallel Scavenge收集器的目标是达到一个可控制的吞吐量(Throughput)。所谓的吞吐量就是CPU用于运行用户代码的时间与CPU总消耗时间的比值。CMS收集器关注点尽可能缩短垃圾收集时用户线程的停顿时间。Parallel Scavenge收集器被称为“吞吐量优先”收集器。

 

       停顿时间越短越适合需要与用户交互的程序,良好的响应速度的能提升用户的体验,而搞吞吐量则可以最高效率地利用CPU时间,尽快地完成程序的运算任务,主要适合在后台运算而不需要太多的交互任务。

 

  4 Serial Old 收集器

 

       Serial Old 是Serial 收集器的老年代版本,同样是一个单线程收集器,使用“标记-清除”算法。

 

       该收集器主要也是在Client模式下的虚拟机使用。如果在Server模式下,主要还有两个用途一个在jdk1.5及以前版本与Parallel Scavenge收集器搭配使用,另外一个就是作为CMS收集器的后背预案。

     

 

  5 Parallel Old 收集器

 

       Parallel Old  是 Parallel Scavenge收集器的老年代版本,使用多线程和“标记-整理”算法。这个收集器是在jdk1.6中才开始提供。

 

       知道Parallel Old 收集器出现后,“吞吐量优先”收集器终于有了比较名副其实的引用组合,在注重

吞吐量及CPU资源敏感的场合,都可以优先考虑Parallel Scavenge加Parallel Old 收集器。

 

  6 CMS (Concurrent Mark Sweep)收集器

 

       CMS 收集器是一种以获取最短回收停顿时间为目标的收集器。CMS 收集器是基于“Mark Sweep”算法。

 

       CMS收集器回收过程分为4个步骤:初始标记,并发标记,重新标记,并发清除。其初始标记和重新标记这两个步骤需要“Stop The World”。初始标记仅仅只是标记一下GC Roots能直接关联到的对象,速度很快,并发阶段就是进行GC Roots Tracing的过程,而重新标记阶段则是为了修正并发标记期间,因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录,这个阶段的停顿时间一般会比初始标记阶段稍长一些,但远比并发标记的时间短。

 

       CMS三个显著的缺点:

        1 CMS收集器对CPU资源非常敏感。

        2 CMS收集器无法处理浮动垃圾,可能出现“Concurrent Mode Failure”失败而导致另一次Full GC产生。

        3 CMS是一款基于“Mark Sweep”算法实现的收集器,将会产生空间碎片。

                

            
  7 G1(Garbage First) 收集器

 

     G1回收时,将整个Java堆划分为多个大小固定的独立区域,并且跟踪这些区域里面的垃圾堆积程度,在后台维护一个优先列表,每次根据允许的收集时间,优先回收垃圾堆积最多的区域(这就是Garbage First名称的由来)。区域划分及有优先级的区域回收,保证了G1收集器在有限的时间内可以获得最高的收集效率。

 

     G1收集器是当前收集器技术发展最前沿成果,G1与CMS相比有两个显著的改进:

      

        1 G1收集器是基于“标记-整理”算法实现的垃圾收集器,也就是不会产生空间碎片。

 

        2 它可以非常精确地控制停顿,即能让使用者明确指定已合格长度为M毫秒的时间片段内,消耗在垃圾收集上的时间不得超过N毫秒。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值