JVM-GC-G1垃圾回收器

JVM-GC-G1垃圾回收器

基本概念

card table
  1. card table概念是为了解决新生代对象进入老年代时,在进行新生代扫描的时候会遍历老年代对象的问题。
  2. 将内存分为多个card,如果在一个老年代card中存在引用新生代对象的对象,则将该区域标记及为dirty card。
CSet(collection set)

用来记录可以被回收的card,即通过算法计算出垃圾多的card;

RSet(RememberedSet)

它是一个HashMap,记录其他Regin中的对象指向本Regin中的引用。这样不用扫描整个堆就可以知道当前谁引用了当前分区中的对象,只需要扫描RSet即可。

MixedGC

当堆内存空间达到一定的阈值,会触发MixedGC,和CMS回收步骤相似。这个阈值可以通过XX:InitiatingHeapOccupacyPercent参数设置,默认45%

G1的特点

  1. 只有逻辑分代的概念,实际内存空间不再分代。因此内存中的空间可以属于新生代、老年代等任何一种。
  2. 将内存分而治之,将内存分块处理,每块内存称为一个Region。
  3. garbage first,垃圾优先,意思是优先回收垃圾数据多的内存块儿。
  4. 并发收集
  5. 吞吐量比PS+PO低,适用于不需要吞吐量的业务。

G1的回收阶段

YGC、MixedGC、FGC。G1的调优是尽量不要FGC。

G1如何解决漏标问题

  1. SATB + RSet解决漏标问题
  2. SATB(snapshot at the beginning):关注引用的删除
  3. 如果一个灰色对象中的引用被删除,JVM将此引用推向GC的堆栈中,保证能被GC扫描到
相关推荐
时光呢39 分钟前
JAVA常见的 JVM 参数及其典型默认值
java·开发语言·jvm
我命由我123456 小时前
Spring Boot 自定义日志打印(日志级别、logback-spring.xml 文件、自定义日志打印解读)
java·开发语言·jvm·spring boot·spring·java-ee·logback
xyliiiiiL11 小时前
ZGC初步了解
java·jvm·算法
心灵Haven14 小时前
JVM介绍
jvm
小样vvv18 小时前
【面试篇】JVM
jvm·面试·职场和发展
兢兢业业的小白鼠18 小时前
Java高级JVM知识点记录,内存结构,垃圾回收,类文件结构,类加载器
java·开发语言·jvm·tomcat
程序猿chen1 天前
《JVM考古现场(十五):熵火燎原——从量子递归到热寂晶壁的代码涅槃》
java·jvm·git·后端·java-ee·区块链·量子计算
Song1 天前
JVM 学习计划表(2025 版)
jvm·学习
皮卡兔子屋1 天前
java虚拟机---JVM
java·jvm
可爱的霸王龙1 天前
JVM——模型分析、回收机制
java·jvm