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扫描到
相关推荐
liangbo72 小时前
12-JVM 调优方法论与参数速查
java·jvm
用户094248568032 小时前
第8章:Java 内存模型(JMM)入门——可见性、有序性、原子性
java·jvm
西峰u3 小时前
Java多线程从入门到线程安全
java·开发语言·jvm
wuminyu11 小时前
Kafka中sendfile与mmap实现机制解析
java·linux·c语言·jvm·c++
万年咸鱼16 小时前
JVM 内存区域详解
jvm
Escalating_xu19 小时前
【System V 信号量】从 P/V 原语到 Builder 封装:写出可控、可清理的进程互斥组件
java·linux·开发语言·jvm
HEJOO91 天前
JVM 参数调优实战指南
jvm
码农哈丁1 天前
从 JVM 到 Cargo:把整个 Kotlin 项目移植到 Rust 的踩坑实录
jvm·rust·kotlin
User_芊芊君子1 天前
sbt 鸿蒙 PC 适配全记录:从 JVM 构建工具到 HAP_HNP 交付闭环
jvm·华为·harmonyos
小范的技术工坊1 天前
每日一题gogogo
jvm