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扫描到
相关推荐
好吃的肘子35 分钟前
JUC入门(五)
java·jvm·数据库·java-ee·intellij-idea
zhangxzq15 小时前
JVM 性能问题排查实战10连击
java·运维·jvm·经验分享·docker
zhangxzq15 小时前
JVM 与容器化部署调优实践(Docker + K8s)
jvm·docker
qq_2142258715 小时前
深入解析 Java GC 调优:减少 Minor GC 频率,优化系统吞吐
java·jvm·其他·性能优化
五月茶15 小时前
JUC高并发编程
java·开发语言·jvm
暮乘白帝过重山17 小时前
JVM之GC常见的垃圾回收器
java·jvm·算法
沸材21 小时前
JVM——类加载器
jvm
范纹杉想快点毕业1 天前
深入解析C++静态成员变量与函数
java·开发语言·jvm
长勺1 天前
【JVM】学习笔记
jvm·笔记·学习
ThetaarSofVenice1 天前
Java虚拟机 -虚拟机栈
java·开发语言·jvm