【JVM】垃圾收集器

    xiaoxiao2022-07-12  156

    目录

    垃圾收集器:

    新生代垃圾收集器:

    Serial:

    ParNew收集器:

    Parallel Scavenge收集器

    老年代垃圾收集器:

    Serial Old收集器

    Parallel Old收集器:

    CMS收集器(Concurrent Mark Sweep)

    G1收集器

    垃圾收集器选择原理:


    垃圾收集器:

    收集算法是内存回收的方法论,垃圾收集器是内存回收的具体实现。

    新生代、老年代的收集器如下:

    新生代垃圾收集器:

    Serial:

    特点:

    新生代最悠久,最基本单线程收集器:只会一个CPU或一条线程去完成垃圾收集工作停顿问题:进行垃圾收集时,必须暂停其他所有的工作线程,知道它收集结束。简单高效(对于单线程来说)

     

    Serial/Serial Old收集器运行示意图

     

    ParNew收集器:

     

    特点:

    新生代多线程;只有它能与CMS收集器配合工作;

     

    ParNew/Serial Old收集器运行示意图

     

    Parallel Scavenge收集器

     

    特点:

    新生代并行的多线程吞吐量优先: 吞吐量:运行用户代码时间/(运行用户代码时间+垃圾收集时间)自适应调节策略

     

    老年代垃圾收集器:

    Serial Old收集器

     

    特点:

    单线程标记-整理算法

     

    Serial/Serial Old收集器运行示意图

     

     

    Parallel Old收集器:

    特点:

    多线程标记-整理算法

     

    Parallel Scavenge /Parallel Old收集器运行示意图

     

    CMS收集器(Concurrent Mark Sweep)

     

    特点:

    以获取最短回收停顿时间为目标的标记-清除算法并发收集、低停顿对CPU资源敏感无法处理浮动垃圾会产生内存碎片

    运作过程:

    初始标记:“Stop The World”标记一下GC Roots能直接关联的对象,速度很快并发标记:“Stop The World”GC Tracing的过程。耗时长,可以与用户线程并发执行重新标记:修正并发标记期间因用户程序继续运作而导致标记产生变动的那一部分对象的标记记录,停顿时间比初始标记长,比并发标记时间短。并发清除:耗时长,可以与用户线程并发执行

     

     

    G1收集器

    特点:

    并行与并发分代收集:空间整合:标记-整理、复制可预测的停顿

     

    运行过程:

    初始标记并发标记最终标记筛选回收

     

     

     

    垃圾收集器选择原理:

    优先调整堆的大小让服务器自己来选择如果内存小于100M,使用串行收集器如果是单核,并且没有停顿时间的要求,串行或者JVM自己选择如果允许停顿时间超过1秒,选择并行或者JVM自己选如果响应时间最重要,并且不能超过1秒,使用并发收集器

     

     

     

    最新回复(0)