垃圾收集器|g1收集器

JVM内存的YOUNG区和OLD都是使用G1垃圾收集器,G1收集器内存结构

 

每个region(区域)的大小 1~32M,是2的幂次方

对象储存:

  • 0.5region <= 对象 <1 region,这个对象会直接存储在 O区,并标记为H区(超大对象区)

  • 对象>1 region,会申请两个H区来存储这个对象

region组成:

  • Rset:region有一块区域叫做Rset,用来记录其他region引用当前region的对象

  • Cset:本次GC需要清理的region集合

YOUNG GC

 

GC过程:对象拷贝,E + S (from) => S (to)

  • Young Generation:E + S(from)

  • Recently Copied in Young Generation:S (to),未使用时没有标记,拷贝后标记为 S (to)

MIx GC(OLD GC时,会同时有 YOUNG GC)

GC过程

  • 初次标记,标记GCRoot直接引用的对象和对象所在的region(称为RootRegion),初次标记会有STW (stop the world)

    • Stop the World,简称STW,指的是Gc事件发生过程中,会产生应用程序的停顿。停顿产生时整个应用程序线程都会被暂停,没有任何响应,有点像卡死的感觉,这个停顿称为STW。

  • 扫描所有OLD区的Rset,标识 RootRegion有引用的region

  • 并发标记,遍历RootRegion有引用的区(上一步标识的region),不用遍历整个OLD区

  • 重新标记,本来有使用,但是系统运行后变成未被使用的对象,使用算法SATB,这一步会有STW (stop the world)

  • 复制清理,会有STW ,只清理垃圾较多的region

 

参考文章 https://github.com/sunwu51/notebook/blob/master/19.09/java_jvm%E5%9E%83%E5%9C%BE%E6%94%B6%E9%9B%86%E5%99%A8.md

posted @ 2022-02-16 22:56  huiyii  阅读(97)  评论(0编辑  收藏  举报