深入理解Java虚拟机(三)

1.垃圾收集器

Serial收集器,单线程收集器。优点是简单而高效(与其他收集器的单线程比),对于限定单个CPU的环境来说,Serial收集器由于没有线程交互的开销,专心做垃圾收集自然可以获得最高的单线程收集效率。Serial收集器对于运行在Client模式下的虚拟机来说是一个很好的选择。

              《深入理解Java虚拟机(三)》

虚拟机Client模式和Server模式

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

                     《深入理解Java虚拟机(三)》

《深入理解Java虚拟机(三)》

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

        目的是达到一个可控制的吞吐量,吞吐量=运行用户代码时间/(运行用户代码时间+垃圾收集时间)

       《深入理解Java虚拟机(三)》

        自适应调节策略也是Parallel Scavenge收集器与ParNew收集器的一个重要区别。

       《深入理解Java虚拟机(三)》

      《深入理解Java虚拟机(三)》

       《深入理解Java虚拟机(三)》

Serial Old收集器,是Serial收集器的老年代版本,单线程收集器,使用“标记-整理”算法。主要意义也是在与给Client模式下 的虚拟机使用,如果在Server模式下,它的两大用途:一是在JDK1.5以及之前版本中与Parallel Scavenge收集器搭配使用,另一个是作为CMS收集器的后背预案。

《深入理解Java虚拟机(三)》

Parallel Old收集器,是Parallel Scavenge收集器的老年代版本,多线程,“标记-整理”算法,在JDK1.6中才开始提供的。在注重吞吐量以及CPU资源敏感的场合,都可以优先考虑Parallel Scavenge加Parallel Old收集器。

《深入理解Java虚拟机(三)》

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

            运作过程分为4个步骤,包括:初始标记、并发标记、重新标记、并发清除。

           《深入理解Java虚拟机(三)》

          《深入理解Java虚拟机(三)》

          《深入理解Java虚拟机(三)》

     优点是并发收集,低停顿。

     缺点:1.对CPU资源非常敏感,在并发阶段,它虽然不会导致用户线程停顿,但是会因为占用了一部分线程(或者说CPU资源)而导致应用程序变慢,总吞吐量会降低。

               2.无法处理浮动垃圾。

               《深入理解Java虚拟机(三)》

               《深入理解Java虚拟机(三)》

              3.“标记-清除”算法会产生大量的空间碎片。

               《深入理解Java虚拟机(三)》

G1收集器,是一款面向服务端应用的垃圾收集器,Hotspot开发团队赋予它的使命是未来可替换掉JDK1.5中发部的CMS收集器。

      特点:

              《深入理解Java虚拟机(三)》

《深入理解Java虚拟机(三)》

《深入理解Java虚拟机(三)》

《深入理解Java虚拟机(三)》

《深入理解Java虚拟机(三)》

《深入理解Java虚拟机(三)》

《深入理解Java虚拟机(三)》

《深入理解Java虚拟机(三)》《深入理解Java虚拟机(三)》

    原文作者:java虚拟机
    原文地址: https://blog.csdn.net/atongmu2017/article/details/80827144
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞