📚 分类
JVM
🕵🏽‍♀️ 问题描述
G1垃圾收集器
👨‍🏫 问题讲解
✔ 应用于新生代和老年代,在JDK9之后默认使用G1
✔ 划分成多个区域,每个区域都可以充当eden、survivor、old、humongous,其中humongous专为大对象准备
✔ 采用复制算法
✔ 响应时间与吞吐量兼顾
✔ 分成三个阶段: 新生代回收、并发标记、混合收集
✔ 如果并发失败(即回收速度赶不上创建新对象速度),会触发Full GC

❒ Young Collection(年轻代垃圾回收)

✔ 初始时,所有区域都处于空闲状态
✔ 创建了一些对象,挑出一些空闲区域作为伊甸园区存储这些对象
✔ 当伊甸园需要垃圾回收时,挑出一个空闲区域作为幸存区,用复制算法复制存活对象,需要暂停用户线程
✔ 随着时间流逝,伊甸园的内存又有不足
✔ 将伊甸园以及之前幸存区中的存活对象,采用复制算法,复制到新的幸存区,其中较老对象晋升至老年代

❒ Young Collection + Concurrent Mark(年轻代垃圾回收 + 并发标记)

✔ 当老年代占用内存超过阈值(默认是45%)后,触发并发标记,这时无需暂停用户线程
✔ 并发标记之后,会有重新标记阶段解决漏标问题,此时需要暂停用户线程。
✔ 这些都完成后就知道了老年代有哪些存活对象,随后进入混合收集阶段。此时不会对所有老年代区域进行回收,而是根据暂停时间目标优先回收价值高(存活对象少)的区域(这也是Gabage First名称的由来)。

❒ Mixed Collection (混合垃圾回收)

✔ 混合收集阶段中,参与复制的有eden、survivor、old


🏳️‍🌈 问题总结
✔  应用于新生代和老年代,在JDK 9之后默认使用G1
✔  划分成多个区域,每个区域都可以充当eden、survivor、old、humongous,其中humongous专为大对象准备
✔  采用复制算法
✔  响应时间与吞吐量兼顾
✔  分成三个阶段:新生代回收(stw)、并发标记(重新标记stw)、混合收集
✔  如果并发失败(即回收速度赶不上创建新对象速度),会触发Full GC
📖 问题信息
📈 浏览次数:12 | 📅 更新时间:2025-12-15 12:10:01
📦 创建信息
🏷️ ID:141 | 📅 创建时间:2025-02-01 20:24:29