Java 的 G1 垃圾回收流程
Java 的 G1 垃圾回收流程
G1(Garbage-First)垃圾收集器 是一种区域化、并发、低延迟的垃圾回收器,适合大堆内存和对暂停时间有严格要求的应用程序。G1 的垃圾回收流程主要包括以下阶段:
1. 堆的区域化分区
在 G1 中,堆被分为多个大小相等的 Region,每个 Region 可以扮演以下角色之一:
- Eden:存储新创建的对象。
- Survivor:存储从 Eden 晋升的存活对象。
- Old:存储长期存活的对象。
- Humongous:存储超大对象(大小超过 Region 的 50%)。
2. 垃圾回收的主要阶段
2.1 年轻代垃圾回收(Young GC)
- 触发条件:
- Eden 区域内存耗尽。
- 回收流程:
- STW 初始标记:暂停应用线程,标记所有 Eden 区和 Survivor 区中不再使用的对象。
- 复制存活对象:将存活对象从 Eden 复制到 Survivor 或 Old 区。
- 更新引用:修复堆中引用的指向。
2.2 并发标记阶段
并发标记阶段的目的是标记整个堆中所有存活对象,识别可以回收的区域。分为以下几个步骤:
- 初始标记(STW):
- 标记 GC Roots 及直接可达对象。
- 与 Young GC 结合运行,减少停顿。
- 并发标记:
- 遍历堆中的对象图,标记所有可达对象。
- 与应用线程并发执行。
- 最终标记(STW):
- 修正并发标记阶段遗漏的引用变化,处理 SATB 缓冲区。
- 清理阶段:
- 统计各区域的回收价值,确定需要回收的区域。
2.3 混合垃圾回收(Mixed GC)
- 触发条件:
- Old 区的内存使用达到一定比例(默认是 45%)。
- 回收流程:
- 回收 Eden 和 Survivor 区。
- 按优先级回收部分 Old 区,优先清理垃圾比例最高的区域。
- 对回收的 Old 区进行整理(压缩)。
3. 关键机制
3.1 记忆集(Remembered Set)
- 用于记录跨区域的引用,避免全堆扫描。
- 每个 Region 都有一个 Remembered Set,记录指向该 Region 的引用。
3.2 分区优先级
- G1 按区域的垃圾比例排序,优先回收垃圾比例高的区域,称为“Garbage-First”策略。
3.3 SATB(Snapshot-At-The-Beginning)
- 在标记阶段使用快照集算法,记录堆在标记开始时的对象状态,确保标记过程一致性。
4. 回收阶段的 STW 停顿
G1 的设计目标是控制 STW 停顿时间:
- 通过并发执行标记和回收任务,减少全堆停顿时间。
- Mixed GC 和 Young GC 阶段的停顿时间由用户通过
-XX:MaxGCPauseMillis配置。
5. 总结
G1 垃圾回收流程通过分区、并发标记和分阶段回收实现高效的垃圾收集:
- Young GC:快速回收新生代,减轻老年代压力。
- 并发标记:遍历整个堆,标记存活对象。
- Mixed GC:结合 Eden 区和高垃圾比例的 Old 区回收,优化堆利用率。
G1 的核心在于其区域化设计和优先回收策略,通过最大程度降低垃圾回收对应用的影响,实现低延迟的性能优化。
Java 的 G1 垃圾回收流程的更多相关文章
- Java编程思想学习笔记_1(Java内存和垃圾回收)
1.Java中对象的存储数据的地方: 共有五个不同的地方可以存储数据. 1)寄存器.最快,因为位于处理器的内部,寄存器按需求分配,不能直接控制. 2)堆栈.位于通用RAM,通过堆栈指针可以从处理器那里 ...
- 高吞吐低延迟Java应用的垃圾回收优化
高吞吐低延迟Java应用的垃圾回收优化 高性能应用构成了现代网络的支柱.LinkedIn有许多内部高吞吐量服务来满足每秒数千次的用户请求.要优化用户体验,低延迟地响应这些请求非常重要. 比如说,用户经 ...
- CMS垃圾回收与G1垃圾回收
CMS垃圾回收与G1垃圾回收的比较请参见:http://colobu.com/2015/04/14/G1-Getting-Started/
- Java虚拟机之垃圾回收详解一
Java虚拟机之垃圾回收详解一 Java技术和JVM(Java虚拟机) 一.Java技术概述: Java是一门编程语言,是一种计算平台,是SUN公司于1995年首次发布.它是Java程序的技术基础,这 ...
- 【java虚拟机序列】java中的垃圾回收与内存分配策略
在[java虚拟机系列]java虚拟机系列之JVM总述中我们已经详细讲解过java中的内存模型,了解了关于JVM中内存管理的基本知识,接下来本博客将带领大家了解java中的垃圾回收与内存分配策略. 垃 ...
- java中存在垃圾回收机制,但是还会有内存泄漏的问题,原因是
答案是肯定的,但不能拿这一句回答面试官的问题.分析:JAVA是支持垃圾回收机制的,在这样的一个背景下,内存泄露又被称为“无意识的对象保持”.如果一个对象引用被无意识地保留下来,那么垃圾回收器不仅不会处 ...
- JVM G1垃圾回收算法简要介绍
JVM G1垃圾回收算法简要介绍 G1的特点 能够像CMS垃圾回收算法一样并发操作应用线程(潜台词:多核) 无需太长时间即可压缩空闲内存空间(潜台词:不会引起太多的GC停顿时间) 尽可能地让GC时长可 ...
- 每日一问:讲讲 Java 虚拟机的垃圾回收
昨天我们用比较精简的文字讲了 Java 虚拟机结构,没看过的可以直接从这里查看: 每日一问:你了解 Java 虚拟机结构么? 今天我们必须来看看 Java 虚拟机的垃圾回收算法是怎样的.不过在开始之前 ...
- 关于elasticsearch使用G1垃圾回收替换CMS
最近ES集群数据节点经常出现jvm占用过高,频繁GC导致ES集群卡死,很长时间才恢复.在网上看到用G1垃圾回收可以改善这一情况,但都是老版本的ES,我们现在使用的版本是5.5.2,所以想问问各位5.5 ...
- JDK8新垃圾回收机制--G1垃圾回收机制
G1全称是Garbage First Garbage Collector,使用G1的目的是简化性能优化的复杂性.例如,G1的主要输入参数是初始化和最大Java堆大小.最大GC中断时间. G1 GC由Y ...
随机推荐
- 某次信创环境Oceanbase数据库偶发乱码问题
资料迁移,整理分享. 问题发生在2023年 一.环境介绍及问题简述 数据库 oceanbase 操作系统 Linux (麒麟) WEB中间件 Tongweb 数据库表编码 GBK 中间件默认使用的HT ...
- “天翼云息壤杯”高校AI大赛福建赛区启动!
11月20日,2024首届全国"天翼云息壤杯"高校AI 大赛(福建赛区)正式启动.中国电信福建公司携手华为公司.福建省计算机学会.福建省自动化学会,正式启动天翼云科技有限公司承办的 ...
- Luogu P9869 NOIp2023 三值逻辑 题解 [ 绿 ] [ 带权并查集 ]
三值逻辑:有点坑并且细节较繁琐,但有点板子的并查集. 修改操作 发现对于每个点,只有对他的最后一次操作才是有用的,所以记录下最终的祖先即可. 然而这里并不能用并查集来实现,因为并查集它具有的是传递性, ...
- 历时两天半由浅入深总结了20道Vue高频面试题
作为一个程序员如果你想要找到你心仪的工作,不可避免的就会问到很多八股文,虽然有的和工作没有半毛钱关系,但是你如果想要通过面试还必须得会.所以我最近开始总结一些面试题,一是为了加强自己的理解能够找到一份 ...
- 【博客搭建】Hexo使用笔记
[博客搭建]Hexo 使用笔记 Hexo 是一款前端博客框架,可以自动根据基于 Markdown 的文章生成博客网站代码. 基本概念 项目结构 目录 描述 _config.yml 网站的配置信息 th ...
- 雷电4扩展坞HDMI显示器无法睡眠问题
背景: 最近使用Dell的雷电4扩展坞WD22TB4,感觉很爽,取电脑时,不用再拔显示器.鼠标.键盘,直接把雷电4接口拔出即可. 后来通过windows update升级了intel显卡驱动后,发现电 ...
- 八米云-Hyper-V虚拟机安装教程
疑难解答加微信机器人,给它发:进群,会拉你进入八米交流群 机器人微信号:bamibot 简洁版教程访问:https://bbs.8miyun.cn 准备阶段: 八米云启动U盘(制作方法可参看<制 ...
- 小米手机/红米手机解锁BL详细教程
由于MIUI解锁风控提升,全部小米默认为支持解锁BootLoader的 但需要登录小米账号后,到开发者选项将设备和账号绑定0-1000小时,一般默认为168小时,部分新机实际几百小时,具体绑定时间,我 ...
- 【BUUCTF】Ping Ping Ping
[BUUCTF]Ping Ping Ping (命令执行绕过总结) 题目来源 收录于:BUUCTF GXYCTF2019 题目描述 提示较为明确,get方法传参127.0.0.1后结果如下 比较容易想 ...
- Zookeeper Java客户端连接慢、超时问题Ad-Hoc检查清单
TL;DR 排查思路: 首先确认你的设备到zookeeper的连通性是OK的,可通过命令echo srvr | nc HOST 2181,检查是否可以正常打印节点信息.windows用户可以在命令行输 ...