JVM学习笔记——垃圾回收篇( 六 )

  • 最后只需要对CPU1进行并发清理即可,其他进程继续运行
  • G1垃圾回收器下面我们将会针对jdk1.9默认垃圾回收器做一个详细的介绍
    G1垃圾回收器简介首先我们先来简单介绍一下G1垃圾回收器:
    • G1回收器:Garbage First
    • 在2017成为JDK9的默认垃圾回收器
    下面我们来介绍G1垃圾回收器的特点:
    • 同时注重吞吐量和低延迟,默认的暂停目标是200ms
    • 超大堆内存,将堆划分为多个大小相等的Region
    • 整体上是标记整理法,但两个区域之间是复制算法
    相关JVM参数:
    • -XX:+UseG1GC使用G1垃圾回收器(JDK9之前都不是默认回收器)
    • -XX:G1HeapRegionSize=size设置Region的大小
    • -XX:MaxGCPauseMillis=time设置最大的G1垃圾回收时间
    G1垃圾回收器阶段简介我们通过一张图来简单介绍G1垃圾回收器的过程:
    JVM学习笔记——垃圾回收篇

    文章插图
    我们可以看到整个流程分为三个阶段:
    • YoungCollection:新生代阶段
    • YoungCollection+ConcurrentMark:新生代阶段+并发标记阶段
    • MixedCollection:混合收集阶段
    Young Collection我们首先给出该阶段的展示图:
    JVM学习笔记——垃圾回收篇

    文章插图
    我们对其进行解释:
    • E就是伊甸园,S就是幸存区,O就是老年代
    • 其产生的正常流程就和分代垃圾回收机制一样,但这阶段不会产生GC
    Young Collection + CM我们首先给出该阶段的展示图:
    JVM学习笔记——垃圾回收篇

    文章插图
    我们对其进行解释:
    • 其字符含义完全相同
    • 当新生代内存占满后进行Young GC时会同时进行GC Root的初始标记
    • 老年代占用堆空间比例达到阈值时,进行并发标记(不会产生STW),阈值可以控制
    我们给出并发标记阈值控制语句:
    // 阈值控制-XX:InitiatingHeapOccupancyPercent=percent (默认45%)Mixed Collection我们首先给出该阶段的展示图:
    JVM学习笔记——垃圾回收篇

    文章插图
    我们对其进行解释:
    • 其字符含义完全相同
    • 但该阶段会对E,S,O进行全面垃圾回收
    • 其中最终标记(Remark)和拷贝存活(Evacation)都会STW(我们均会在后面解释)
    我们需要注意一点:
    • Mixed Collection可能并不会将所有老年代的数据都删除
    • 它会根据你设置的最大暂停时间来进行抉择,如果时间不足以删除所有老年代数据,就会挑选部分较大的内存数据进行回收
    Full GC我们需要重新总结一下Full GC操作:
    1. SerialGC(串行垃圾回收)
    • 新生代内存不足时发生的垃圾收集 - minor gc
    • 老年代内存不足时发生的垃圾收集 - full gc
    1. ParalllelGC(吞吐量优先垃圾回收)
    • 新生代内存不足时发生的垃圾收集 - minor gc
    • 老年代内存不足时发生的垃圾收集 - full gc
    1. CMS(响应时间优先垃圾回收)
    • 新生代内存不足时发生的垃圾收集 - minor gc
    • 老年代内存不足时优先进行标记操作同步垃圾回收,当内存完全占满后才采用full gc
    1. G1(Garbage First)
    • 新生代内存不足时发生的垃圾收集 - minor gc
    • 老年代内存不足时优先进行MixedCollection同步垃圾回收,当内存完全占满后才采用full gc
    G1知识点补充我们在前面已经提到了我们将堆划分为多个Region
    但其实这个Region并不仅仅只分为了E,S,O三个空间,此外还包括以下空间:

    经验总结扩展阅读