jvm G1垃圾收集器

名词解释:
    并行 是 =
    并发 是 >

串行:单线程,stop-the-world ,-XX:+UseSerialGC
并行:多线程,stop-the-world , -XX:+UseParallerGC
cms:年轻代与并行收集器相似, -XX:+UseConcurrentMarkSweepGC,老年代收集线程与应用线程同时工作,在初始标记和重新标记时,会stop-the-world,缺点:和应用线程竞争cpu,优点:停顿较短,老年代被占阀值,适合于追求更高吞吐量且能容忍更长GC暂停的应用。


G1:混合垃圾收集器,将堆拆成一系列的分区,一段时间内,大部分垃圾收集操作只在一个区内执行。老年代与年轻代内存空间可互相占用。 年轻代收集方式为并行。老年代收集是按一块分区来进行的,一个时刻只有一块被收集,并且会伴随着一次年轻代收集,老年代超过堆占用阀值进行一次并发stop-the-world方式的初始标记
初始标记(伴随年轻代同时进行) -》 并发多线程标记,标记老年代的存活对象 -》并行重新标记,标记初始标记时被应用线程占用所错过的对象-》当某块老年代没有一个存活对象,则清除。
G1暂停主要是年轻代的收集和混合收集
G1设计目标是限定较大的内存空间和指定GC停顿时间,他采用启发式算法
G1分区尺寸在1M-32M之间,是2的幂方
收集过程中会有一个收集分区的集合,称为CSet
RSet(remembered set)每个分区有一个记忆集合,用来记忆分区外对分区内的引用。
年轻代分为: eden(新生代) 与 survivor(存活代)
老年代的空间占用达到占用门槛会进行老年代,默认45%,可通过-XX:InitiatingHeapOccupancyPercent设置。
巨型对象:超过分区50%,用连续分区来存储,无连续分区是会启动fullGc
G1的full GC 与串行收集算法相同
G1周期有5个阶段:初始标记-》并发根分区扫描-》并发标记-》重新标记-》清除
初始标记:收集所有对象的起点,stop-the-world
根分区扫描: 并发的进行根分区扫描,不会暂停
并发标记:不会发生stop-the-world
重新标记:非常短暂的stop-the-world
清除:找出没有存活对象的分区并回收。
堆空间调整:G1整堆尺寸是分区尺寸的整倍数,对象分配失败后,会扩大堆尺寸,新建分区来存放对象。

猜你喜欢

转载自blog.csdn.net/u012244894/article/details/80047762
今日推荐