G1入门理解

G1入门理解

什么是G1(Garbage-First)

G1是jdk1.9的默认垃圾收集器,G1收集器兼顾低延迟高吞吐在服务端运行,HotSpot团队期望取代CMS收集器。也就是在满足停顿时间的情况下获取最大的吞度量。有两种收集模式Young GCMixed GC。G1收集器将堆内存划分成大小相等的Region,新生代,老年代也就成了逻辑概念。整体上采用的是标记-整理算法,局部采用了复制算法。

在这里插入图片描述

每一个方块叫做region,堆内存会分为2048个region,每个region大小等于堆内存除以2048。还是分为Eden区、S0区、S1区、老年代,只不过空间可以是不连续的了。Humongous区是专门用来存放大对象的(如果一个对象超过region的50%,那么就是大对象)

G1如何工作

在这里插入图片描述

初始标记

  • 和CMS类似,根据GC Roots找到直接引用对象
  • 一旦标记完,就恢复线程继续工作
  • 过程非常快

并发标记

  • 和CMS类似,不需要STW,用户线程和垃圾收集线程并行工作,去找到其他可达对象
  • 时间比较短
  • 三色标记

最终标记

  • 上一个阶段标记的对象,可能有误差,需要进行修正
  • 需要STW,时间也不是很长
  • 原始快照

筛选回收

  • 类似CMS的并发清除阶段
  • 需要CMS来清除对象
  • 可以通过:-XX:MaxGCPauseMillis来指定GC的STW停顿的时间,所有可能并不会回收掉所有的垃圾对象,默认200ms
  • 采用的复制算法,不会产生碎片(会把某个region里的垃圾对象复制到另外空闲region里,比如相邻的)

YoungGC:Eden区满了,就会触发G1中的YoungGC,对Eden区进行GC

MixedGC:老年代的占用率达到:-XX:InitiatiatingHeapOccupancyPercent指定的百分比,回收所有的新生代和部分老年代(根据筛选回收阶段你指定的时间进行回收),以及大对象区

FullGC:在MixedGC过程中,采用的复制算法,如果复制过程中内存不够,则会触发FullGC,会STW,并采用单线程标记-整理算法进行GC,相当于用一次Serial GC

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值