G1垃圾收集器详解

本文详细介绍了G1垃圾收集器的工作原理、特点、参数设置、使用场景及回收过程,包括年轻代GC、老年代并发标记、混合回收等。G1旨在提供低延迟并兼顾高吞吐量,通过分区Region实现空间整合,减少停顿时间。优化建议包括避免固定年轻代大小,适当放宽暂停时间目标。
摘要由CSDN通过智能技术生成

  

因为热爱所以坚持,因为热爱所以等待。熬过漫长无戏可演的日子,终于换来了人生的春天,共勉!!!

目录

1.认识G1垃圾收集器

2.分区Region:化整为零

3.G1垃圾收集器的特点、缺点

4. 参数设置

5.G1的使用场景

6. G1回收器垃圾回收过程

记忆集与写屏障

G1回收细节详解

①. G1回收过程一:年轻代GC

②. 回收过程二:老年代并发标记过程

③. 混合回收 Mixed GC

④. G1的可选过程四:Full GC

7. G1回收器优化建议


1. 什么是G1垃圾收集器?

①. G1(Garbage-First)是一款面向服务端应用的垃圾收集器,主要针对配备多核CPU及大容量内存的机器,以极高概率满足GC停顿时间的同时,还兼具高吞吐量的性能特征

②. 在JDK1.7版本正式启用,是JDK 9以后的默认垃圾收集器,取代了CMS 回收器

2. 为什么名字叫Garbage First?

①. G1是一个并行回收器,它把堆内存分割为很多不相关的区域(region物理上不连续),把堆分为2048个区域,每一个region的大小是1 - 32M不等,必须是2的整数次幂。使用不同的region可以来表示Eden、幸存者0区、幸存者1区、老年代等

②. 每次根据允许的收集时间,优先回收价值最大的Region
(每次回收完以后都有一个空闲的region,在后台维护一个优先列表)

③. 由于这种方式的侧重点在于回收垃圾最大量的区间(Region),所以我们给G1一个名字:垃圾优先(Garbage First)

④. 下面说一个问题:既然我们已经有了前面几个强大的GC,为什么还要发布Garbage First(G1)GC?

  • 官方给G1设定的目标是在延迟可控的情况下获得尽可能高的吞吐量,所以才担当起"全功能收集器"的重任与期望。

2.分区Region:化整为零

  • 使用G1收集器时,它将整个Java堆划分成约2048个大小相同的独立Region块,每个Region块大小根据堆空间的实际大小而定,整体被控制在1MB到32MB之间,且为2的N次幂,即1MB,2MB, 4MB, 8MB, 1 6MB, 32MB。可以通过-XX :G1HeapRegionSize设定。所有的Region大小相同,且在JVM生命周期内不会被改变
  • 虽然还保留有新生代和老年代的概念,但新生代和老年代不再是物理隔离的了,它们都是一部分Region (不需要连续)的集合。通过Region的动态分配方式实现逻辑上的连续。

  •  一个region有可能属于Eden, Survivor 或者0ld/Tenured 内存区域。但是一个region只可能属于一个角色。图中的E表示该region属于Eden内存区域,s表示属于Survivor内存区域,o表示属于old内存区域。图中空白的表示未使用的内存空间。
  • G1垃圾收集器还增加了一种新的内存区域,叫做Humongous内存区域,如图中的H块。主要用于存储大对象,如果超过1.5个region, 就放到H
  • 设置H的原因:

        对于堆中的大对象,默认直接会被分配到老年代,但是如果它是一个短期存在的大对象,
就会对垃圾收集器造成负面影响
。为了解决这个问题,G1划分了一个Humongous区,
它用来专门存放大对象。如果一个H区装不下一个大对象,那么G1会寻找连续的H区来
存储
。为了能找到连续的H区,有时候不得不启动Full GC。 G1的大多数行为都把H区
作为老年代的一部分来看待。

3.G1垃圾收集器的特点、缺点

①. 并行和并发

  • 并行性: G1在回收期间,可以有多个GC线程同时工作,有效利用多核计算能力。此时用户线程STW
  • 并发性: G1拥有与应用程序交替执行的能力,部分工作可以和应用程序同时执行,因此,一般来说,不会在整个回收阶段发生完全阻塞应用程序的情况

②. 分代收集

  • 从分代上看,G1依然属于分代型垃圾回收器,它会区分年轻代和老年代,年轻代依然有Eden区和Survivor区。但从堆的结构上看,它不要求整个Eden区、年轻代或者老年代都是连续的,也不再坚持固定大小和固定数量
  • 将堆空间分为若干个区域(Region),这些区域中包含了逻辑上的年轻代和老年代。
  • 和之前的各类回收器不同,它同时兼顾年轻代和老年代。对比其他回收器,或者工作在年轻代,或者工作在老年代在这里插入图片描述

在这里插入图片描述
 

③. 空间整合

  • G1将内存划分为一个个的region。 内存的回收是
  • 7
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Free的午后

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值