G1垃圾回收器的回收过程

本文介绍了G1垃圾回收器的工作流程,包括年轻代GC、老年代并发标记和混合回收。在年轻代回收中,当Eden区满时触发,暂停应用线程进行清理。当堆内存使用率达到45%时,开始老年代并发标记,随后进行混合回收,回收部分老年代区域。以一个Web服务器为例,展示了G1GC的周期性行为,如每45秒进行一次年轻代回收,每31小时触发老年代并发标记等。
摘要由CSDN通过智能技术生成

一 G1 GC的垃圾回收过程主要包括如下三个环节。

  • 年轻代GC(Young GC)
  • 老年代并发标记过程(Concurrent Marking)
  • 混合回收(Mixed GC)
如果需要,单线程、独占式、高强度的 FullGC 还是继续存在的。它针对 GC 的评估失败提供了一种失败保护机制,即强力回收。

顺时针,young gc -> young gc+concurrent mark->Mixed GC 顺序,进行垃圾回收。
应用程序分配内存,当年轻代的 Eden 区用尽时开始年轻代回收过程;G1 的年轻代收集阶段是一个并行的独占式收集器。在年轻代回收期,G1 GC 暂停所有应用程序线程,启动多线程执行年轻代回收。然后从年轻代区间移动存活对象到 Survivor 区间或者老年区间,也有可能是两个区间都会涉及。
当堆内存使用达到一定值(默认45%)时,开始老年代并发标记过程。
标记完成马上开始混合回收过程。对于一个混合回收期,G1 GC 从老年区间移动存活对象到空闲区间,这些空闲区间也就成为了老年代的一部分。和年轻代不同,老年代的 G1 回收器和其他 GC 不同,G1 的老年代回收器不需要整个老年代被回收,一次只需要扫描/回收一小部分老年代的 Region 就可以了。同时,这个老年代 Region 是和年轻代一起被回收的。

二 实例

一个 Web 服务器,Java 进程最大堆内存为 4G,每分钟响应 1500个请求,每45秒钟会新分配大约 2G 的内存。G1 会每45秒钟进行一次年轻代回收,每 31 个小时整个堆的使用率会达到45%,会开始老年代并发标记过程,标记完成后开始四到五次的混合回收。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值