• Tags ,
  •         
  • www.breakyizhan.com
  •    

    HotSpot虚拟机中的7种垃圾收集器:Serial、ParNew、Parallel Scavenge、Serial Old、Parallel Old、CMS、G1,先介绍一些垃圾收集的相关概念,再介绍它们的主要特点、应用场景、以及一些设置参数和基本运行原理。

    1、垃圾收集器概述


    垃圾收集器是垃圾回收算法(标记-清除算法、复制算法、标记-整理算法、火车算法)的具体实现,不同商家、不同版本的JVM所提供的垃圾收集器可能会有很在差别,本文主要介绍HotSpot虚拟机中的垃圾收集器。

    1-1、垃圾收集器组合

    JDK7/8后,HotSpot虚拟机所有收集器及组合(连线),如下图:

    (A)、图中展示了7种不同分代的收集器:(为什么要区分新生代和老生代可参考:Java虚拟机(JVM)中的新生代、老年代和永生代 )

    Serial、ParNew、Parallel Scavenge、Serial Old、Parallel Old、CMS、G1;

    (B)、而它们所处区域,则表明其是属于新生代收集器还是老年代收集器:

    新生代收集器:Serial、ParNew、Parallel Scavenge;

    老年代收集器:Serial Old、Parallel Old、CMS;

    整堆收集器:G1;

    (C)、两个收集器间有连线,表明它们可以搭配使用:

    Serial/Serial Old、Serial/CMS、ParNew/Serial Old、ParNew/CMS、Parallel Scavenge/Serial Old、Parallel Scavenge/Parallel Old、G1;

    (D)、其中Serial Old作为CMS出现"Concurrent Mode Failure"失败的后备预案(后面介绍);

    每个收集器的详细介绍如下:

    Serial收集器、

    ParNew收集器、

    Parallel Scavenge收集器、

    Serial Old收集器、

    Parallel Old收集器、

    CMS收集器、

    G1收集器;

     

    1-2、并发垃圾收集和并行垃圾收集的区别

    (A)、并行(Parallel)

    指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态;

    如ParNew、Parallel Scavenge、Parallel Old;

    (B)、并发(Concurrent)

    指用户线程与垃圾收集线程同时执行(但不一定是并行的,可能会交替执行);

    用户程序在继续运行,而垃圾收集程序线程运行于另一个CPU上;

    如CMS、G1(也有并行);

    1-3、Minor GC和Full GC的区别

    (A)、Minor GC

    又称新生代GC,指发生在新生代的垃圾收集动作;

    因为Java对象大多是朝生夕灭,所以Minor GC非常频繁,一般回收速度也比较快;

    (B)、Full GC

    又称Major GC或老年代GC,指发生在老年代的GC;

    出现Full GC经常会伴随至少一次的Minor GC(不是绝对,Parallel Sacvenge收集器就可以选择设置Major GC策略);

    Major GC速度一般比Minor GC慢10倍以上;

    下面将介绍这些收集器的特性、基本原理和使用场景,并重点分析CMS和G1这两款相对复杂的收集器;但需要明确一个观点:

    没有最好的收集器,更没有万能的收集;

    选择的只能是适合具体应用场景的收集器。

     
    转载请保留页面地址:https://www.breakyizhan.com/javamianshiti/2863.html