【JVM基础13】——垃圾回收-详细聊一下G1垃圾回收器

目录

  • [1- 引言:G1垃圾回收器](#1- 引言:G1垃圾回收器)
  • [2- ⭐核心:详解 G1 垃圾回收器](#2- ⭐核心:详解 G1 垃圾回收器)
    • [2-1 概述G1垃圾回收器](#2-1 概述G1垃圾回收器)
    • [2-2 新生代垃圾回收 Young Collection](#2-2 新生代垃圾回收 Young Collection)
    • [2-3 并发标记阶段 Young Collection + Concurrent Mark](#2-3 并发标记阶段 Young Collection + Concurrent Mark)
    • [2-4 Mixed Collection(混合垃圾回收)](#2-4 Mixed Collection(混合垃圾回收))
  • [3- 小结:](#3- 小结:)
    • [3-1 详细聊一下 G1 垃圾回收器](#3-1 详细聊一下 G1 垃圾回收器)

1- 引言:G1垃圾回收器

  • G1垃圾回收器(Garbage First Garbage Collector,简称G1 GC)是Java虚拟机(JVM)的一种垃圾回收器,设计用于取代老式的CMS(Concurrent Mark-Sweep)垃圾回收器。
  • G1 GC的目标是实现更高的性能和更好的可预测性,尤其是在大内存、多核处理器环境下的应用程序中。以下是G1垃圾回收器的一些关键特性和工作原理:

2- ⭐核心:详解 G1 垃圾回收器

2-1 概述G1垃圾回收器

  • G1 垃圾回收器应用于新生代和老年代,在 JDK9 之后默认使用 G1
  • 在 G1 垃圾回收中,划分了多个区域,每个区域可以充当 Eden、Survivor、Old、humongous,其中humongous 是专门为大对象准备的。
  • 在垃圾回收中,主要分为三个阶段:新生代回收并发标记混合收集
  • 如果并发失败(即回收速度赶不上创建新对象的速度),会触发 Full GC
  • 优点:
    • 在垃圾回收中采用复制算法,没有内存碎片。
    • 响应时间与吞吐量兼顾。

2-2 新生代垃圾回收 Young Collection

第一次新生代垃圾回收

  • 初始时,所有区域都处于空闲状态
  • 建了一些对象,挑出一些空闲区域作为伊甸园区存储这些对象(新生代的创建会由JVM波动,因此新生代内存的限制会限制伊甸园区的创建)
  • 当伊甸园需要垃圾回收时,挑出一个空闲区域作为幸存区,用复制算法复制存活对象,需要暂停用户线程
  • 之后 在标记的过程和复制的过程中需要出发一个 STW 暂停

第二次新生代垃圾回收

  • 随着时间流逝,伊甸园区的内存又有不足
  • 将伊甸园区以及之前幸存者区域中的存活对象,采用复制算法,复制到新的幸存者区,其中较老对象晋升为老年代

2-3 并发标记阶段 Young Collection + Concurrent Mark

年轻代回收+并发标记

  • 当老年代占用内存超过阈值(默认是 45%)之后,触发并发标记,这时候无序暂停用户线程。

2-4 Mixed Collection(混合垃圾回收)

  • 并发标记之后,会有重新标记阶段解决漏标的问题,此时需要暂停用户线程。
  • 这些都完成之后就知道了老年代有哪些存活的对象,随后进入混合收集阶段,此时不会对所有老年代区域进行回收,而是根据暂停时间目标优先级回收价值高(存活对象少)的区域(这也就是 Gabage First 名称的由来)
  • 混合收集阶段中,参与复制的区域有 Eden、Survivor、old
  • 复制完成之后,内存将得到释放,进入下一轮 新生代回收、并发标记、混合收集

3- 小结:

3-1 详细聊一下 G1 垃圾回收器


相关推荐
NEFU AB-IN4 分钟前
Prompt Gen Desktop 管理和迭代你的 Prompt!
java·jvm·prompt
唐古乌梁海6 小时前
【Java】JVM 内存区域划分
java·开发语言·jvm
众俗6 小时前
JVM整理
jvm
echoyu.6 小时前
java源代码、字节码、jvm、jit、aot的关系
java·开发语言·jvm·八股
代码栈上的思考21 小时前
JVM中内存管理的策略
java·jvm
thginWalker1 天前
深入浅出 Java 虚拟机之进阶部分
jvm
沐浴露z1 天前
【JVM】详解 线程与协程
java·jvm
thginWalker1 天前
深入浅出 Java 虚拟机之实战部分
jvm
程序员卷卷狗2 天前
JVM 调优实战:从线上问题复盘到精细化内存治理
java·开发语言·jvm
Sincerelyplz3 天前
【JDK新特性】分代ZGC到底做了哪些优化?
java·jvm·后端