【jvm】G1垃圾收集器的特点,为什么低延迟

目录

          • [1. 说明](#1. 说明)
          • [2. 特点](#2. 特点)
            • [2.1 并行与并发](#2.1 并行与并发)
            • [2.2 分代收集](#2.2 分代收集)
            • [2.3 空间整合](#2.3 空间整合)
            • [2.4 可预测的停顿](#2.4 可预测的停顿)
          • [3. 实现低延迟的原因](#3. 实现低延迟的原因)
            • [3.1 区域化管理](#3.1 区域化管理)
            • [3.2 并发标记](#3.2 并发标记)
            • [3.3 智能回收](#3.3 智能回收)
            • [3.4 可预测的暂停时间](#3.4 可预测的暂停时间)
1. 说明
  • 1.G1(Garbage First)垃圾收集器是Java虚拟机(JVM)中一款面向服务端应用的垃圾收集器,具有显著的特点和优势,尤其是在低延迟方面表现突出。
  • 2.G1垃圾收集器通过区域化管理、并发标记、智能回收和可预测的暂停时间等机制来实现低延迟暂停。
  • 3.这些机制使得G1能够在不停止整个应用程序的情况下进行垃圾回收,并且根据用户指定的暂停时间来调整回收策略,从而最大程度地减少应用程序的停顿时间。
2. 特点
2.1 并行与并发
  • 1.G1能充分利用多CPU、多核环境下的硬件优势,使用多个CPU或CPU核心来缩短Stop-The-World停顿的时间。
  • 2.部分其他收集器原本需要停顿Java线程执行的GC动作,G1收集器仍然可以通过并发的方式让Java程序继续执行。
2.2 分代收集
  • 1.G1保留了分代概念,但与其他收集器不同的是,G1不需要其他收集器配合就可以管理整个GC堆。
  • 2.它可以通过不同的方法去管理新生代和老年代。
2.3 空间整合
  • 1.G1整体上看是基于"标记-整理"算法实现的收集器,从局部(两个Region之间)上来看是基于"复制"算法实现的。
  • 2.在运作期间不会产生内存碎片空间,有利于程序长时间运行。
2.4 可预测的停顿
  • 1.G1除了追求低停顿外,还能建立可预测的停顿时间模型,能让使用者明确指定在一个长度为M毫秒的时间片段内,消耗在垃圾收集上的时间不得超过N毫秒。
3. 实现低延迟的原因
3.1 区域化管理
  • 1.G1将整个Java堆划分为多个大小相等的独立区域(Region),这些区域在逻辑上是连续的,但物理上不需要连续。
  • 2.这种区域化的管理方式使得G1可以只回收部分区域,而不需要停止整个应用程序的执行,从而降低了应用程序的停顿时间。
3.2 并发标记
  • 1.G1使用并发标记算法来标记存活对象。
  • 2.在垃圾回收过程中,G1会在后台线程中进行对象的标记操作,而不需要停止应用程序的执行。
  • 3.G1可以在应用程序运行的同时进行标记操作,从而减少了应用程序的停顿时间。
3.3 智能回收
  • 1.G1会根据堆内存的使用情况和垃圾回收的需求来智能地选择回收哪些区域。
  • 2.它会优先回收垃圾最多的区域(Garbage-First),以最大程度地提高垃圾回收的效率。
  • 3.这种智能回收的策略可以有效地减少垃圾回收的时间,从而降低了应用程序的停顿时间。
3.4 可预测的暂停时间
  • 1.G1会根据用户指定的目标暂停时间来进行垃圾回收。
  • 2.它会根据应用程序的负载情况和垃圾回收的需求来动态调整回收的区域数量和回收的时间。
  • 3.G1可以在用户指定的暂停时间内完成垃圾回收操作,从而保证了应用程序的低延迟暂停。
相关推荐
Excuse_lighttime6 小时前
JAVA阻塞队列
java·开发语言·jvm
熙客8 小时前
JVM监控
jvm
Thanwind12 小时前
关于JVM和OS中的指令重排以及JIT优化
java·jvm·jmm
快来卷java15 小时前
JVM虚拟机篇(三):JVM运行时数据区与方法区详解
java·jvm·mysql
Aphelios3801 天前
Java全栈面试宝典:线程协作与Spring Bean管理深度解析
java·开发语言·jvm·spring·面试·职场和发展
M malloc1 天前
【C++奇遇记】C++中的进阶知识(继承(一))
java·jvm·c++
摘星编程1 天前
JVM深入原理(六)(二):双亲委派机制
jvm
李小白661 天前
JavaEE初阶复习(JVM篇)
java·jvm·java-ee
我不想当小卡拉米2 天前
C++:继承+菱形虚拟继承的一箭双雕
开发语言·jvm·c++
时光呢2 天前
JAVA常见的 JVM 参数及其典型默认值
java·开发语言·jvm