JVM学习笔记24-G1垃圾收集器

G1是一款面向服务端的垃圾收集器,适用于多核处理器和大内存环境,旨在提供可预测的停顿时间。G1将堆划分为多个Region,并通过高效的Copying算法避免内存碎片。相比CMS,G1能更好地平衡吞吐量和响应时间,通过预测模型选择回收Region。在运行过程中,G1包括Young GC和Mixed GC等模式,其中Mixed GC能同时回收年轻代和部分老年代,确保内存高效利用。G1使用RSet记录引用关系,通过SATB快照算法进行并发标记,实现高效垃圾收集。
摘要由CSDN通过智能技术生成

G1收集器—Garbage First Collector
官方文档地址:点击访问

1 背景

  • 吞吐量
    吞吐量关注的是,在一个指定的时间内最大化一个应用的工作量
    如下方式来衡量一个系统吞吐量的好坏
    • 在一小时内同一个事务(或者任务, 请求)完成的次数(tps)
    • 数据库一小时可以完成多少次查询

对于关注吞吐量的系统,卡顿是可以接受的,因为这个系统关注长时间的大量任务的执行能力,单次快速的响应并不值得考虑

  • 响应能力
    响应能力—一个程序或者系统对请求是否能够及时响应,比如
    • 一个桌面UI能多块地响应一个事件
    • 一个网站能够多快返回查询的数据
    • 数据库能够多快的返回查询的数据

对于这列对相应能力敏感的场景,长时间的停顿是无法接受的


2 简介

  • G1收集器是一个面向服务端的垃圾收集器,适用于多核处理器,大内存容量的服务器
  • 它满足短时间GC停顿的同时达到一个较高的吞吐量
  • JDK 7以上版本适用

设计目标

  • 与应用线程同时工作,几乎不需要STW(与CMS类似)
  • 整理剩余空间,不产生内存碎片(CMS只能在Full GC时,用STW整理内存碎片)
  • GC停顿更加可控
  • 不牺牲系统的吞吐量
  • GC不要求额外的内存空间(CMS需要预留空间存储浮动垃圾)

设计规划—替换掉CMS
G1在某些方面弥补了CMS的不足,比如

  • CMS使用的是Mark-Sweep算法,自然会产生垃圾碎片
  • G1基于Copying算法,高效的整理剩余内存,而不要管理内存碎片

另外,G1提供多种手段,以达到对GC停顿时间的可控

  • Hotspot虚拟机的主要构成

Hotspot虚拟机的主要构成

3 G1收集器的堆结构

G1收集器的堆结构

  • 整个堆被划分为一个个相等的不连续的内存区域(regions),每个region都有一个分代的角色
    • Eden
    • Survivor
    • Old
  • 对每个角色的数量并没有强制的规定,也就是说对每个分代内存的大小,可以动态变化
  • G1最大的特点就是高效的执行回收,优先去执行那些大对象可回收的区域(region)

G1使用了GC停顿时间可预测的模型来满足用户设定的GC停顿时间,根据用户设定的目标时间,G1会自动的选择哪些region要清除,一次清除多少个region

G1从多个region中复制存活的对象,然后集中放入到一个region, 同时清除, 整理内存(copying收集算法)


4 G1对比其他垃圾收集器

  • 对比使用Mar
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JVM (Java Virtual Machine) G1 (Garbage-First) 垃圾收集是一种用于 Java 应用程序的垃圾收集算法。它是自JDK 7u4版本后引入的一种全新的垃圾收集。 G1垃圾收集的设计目标是为了解决传统的分代垃圾收集可能遇到的一些问题,如停顿时间长、内存碎片化等。它采用了一种基于区域的垃圾收集方式,可以将内存划分为多个大小相等的区域,每个区域可以是Eden、Survivor或Old区。 G1垃圾收集的工作原理如下: 1. 初始标记(Initial Mark):标记所有从根对象直接可达的对象。 2. 并发标记(Concurrent Mark):在并发执行程序的同时,标记那些在初始标记阶段无法访问到的对象。 3. 最终标记(Final Mark):为并发标记阶段中发生改变的对象进行最终标记。 4. 筛选回收(Live Data Counting and Evacuation):根据各个区域的回收价值来优先回收价值低的区域。 G1垃圾收集具有以下特点: - 并发执行:在执行垃圾收集过程时,尽可能减少应用程序的停顿时间。 - 分区回收:将整个堆划分为多个区域,可以根据需要优先回收垃圾较多的区域,从而避免全堆回收带来的长时间停顿。 - 内存整理:G1垃圾收集会对内存进行整理,减少内存碎片化,提高内存利用率。 需要注意的是,G1垃圾收集并不适用于所有情况。在特定的场景下,如大堆情况下的长时间运行、对延迟要求非常高的应用等,可能需要考虑其他垃圾收集的使用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值