美文网首页
垃圾收集器

垃圾收集器

作者: Du___ | 来源:发表于2019-03-25 16:01 被阅读0次

    Serial收集器

    优点:简单而高效(与其他收集器的单线程相比)。Serial收集器由于没有线程交互的开销,自然可以获得很高的单线程收集效率。

    缺点:Stop The World

    新生代采用复制算法,老年代采用标记-整理算法。


    ParNew收集器:

    ParNew收集器其实就是Serial收集器的多线程版本,除了使用多线程进行垃圾收集外,其余行为(控制参数、收集算法、回收策略等等)和Serial收集器完全一样。

    新生代采用复制算法,老年代采用标记-整理算法

    Parallel Scavenge收集器:

    Parallel Scavenge 收集器类似于ParNew 收集器,是Server 模式(内存大于2G,2个cpu)下的默认收集器

    特点:

    Parallel Scavenge收集器关注点是吞吐量(高效率的利用CPU)。

    所谓吞吐量就是CPU中用于运行用户代码的时间与CPU总消耗时间的比值

    CMS等垃圾收集器的关注点更多的是用户线程的停顿时间(提高用户体验)。



    Serial Old收集器:

    Serial收集器的老年代版本

    Parallel Old收集器:

    Parallel Scavenge收集器的老年代版本。

    CMS收集器(-XX:+UseConcMarkSweepGC(主要是old区使用)):

    CMS(Concurrent Mark Sweep——标记-清除)收集器是一种以获取最短回收停顿时间为目标的收集器。

    它而非常符合在注重用户体验的应用上使用,它是HotSpot虚拟机第一款真正意义上的并发收集器,它第一次实现了让垃圾收集线程与用户线程(基本上)同时工作

    过程:


    优点:

    并发收集、低停顿

    缺点:

    1.对CPU资源敏感(会和服务抢资源)

    2.无法处理浮动垃圾(在java业务程序线程与垃圾收集线程并发执行过程中又产生的垃圾,这种浮动垃圾只能等到下一次gc再清理了);

    3.它使用的回收算法-“标记-清除”算法会导致收集结束时会有大量空间碎片产生

    G1收集器(-XX:+UseG1GC):

    G1 (Garbage-First)是一款面向服务器的垃圾收集器,主要针对配备多颗处理器及大容量内存的机器. 以极高概率满足GC停顿时间要求的同时,还具备高吞吐量性能特征.


    G1将Java堆划分为多个大小相等的独立区域(Region),虽保留新生代和老年代的概念,但不再是物理隔阂了,它们都是(可以不连续)Region的集合。

    分配大对象(直接进Humongous区,专门存放短期巨型对象,不用直接进老年代,避免Full GC的大量开销)不会因为无法找到连续空间而提前触发下一次GC。

    特点:

    并行与并发:

    G1能充分利用CPU、多核环境下的硬件优势,使用多个CPU(CPU或者CPU核心)来缩短Stop-The-World停顿时间。部分其他收集器原本需要停顿Java线程来执行GC动作,G1收集器仍然可以通过并发的方式让java程序继续执行。

    分代收集:

    虽然G1可以不需要其他收集器配合就能独立管理整个GC堆,但是还是保留了分代的概念

    空间整合:

    与CMS的“标记--清理”算法不同,G1从整体来看是基于“标记整理”算法实现的收集器;从局部上来看是基于“复制”算法实现的。

    可预测停顿:


    G1收集器的运作大致分为以下几个步骤:

    初始标记(initial mark,STW):

    在此阶段,G1 GC 对根进行标记。该阶段与常规的 (STW)年轻代垃圾回收密切相关

    并发标记(Concurrent Marking):

    G1 GC 在整个堆中查找可访问的(存活的)对象

    最终标记(Remark,STW):

    该阶段是 STW 回收,帮助完成标记周期

    筛选回收(Cleanup,STW):

    筛选回收阶段首先对各个Region的回收价值和成本进行排序,根据用户所期望的GC停顿时间来制定回收计划,这个阶段其实也可以做到与用户程序一起并发执行,但是因为只回收一部分Region,时间是用户可控制的,而且停顿用户线程将大幅提高收集效率

    G1垃圾收集分类:

    YoungGC:

    1.新对象进入Eden区

    2.存活对象拷贝到Survivor区

    3.存活时间达到年龄阈值时,对象晋升到Old区

    MixedGC:

    1.不是FullGC,回收所有的Young和部分Old(根据期望的GC停顿时间确定old区垃圾收集的优先顺序)

    2.global concurrent marking (全局并发标记)

        2.1.Initial marking phase:标记GC Root,STW

        2.2 Root region scanning phase:标记存活Region

        2.3.Concurrent marking phase:标记存活的对象

        2.4 Remark phase :重新标记,STW

        2.5.Cleanup phase:部分STW

    相关文章

      网友评论

          本文标题:垃圾收集器

          本文链接:https://www.haomeiwen.com/subject/mlavvqtx.html