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扫描到
相关推荐
亲爱的非洲野猪31 分钟前
从一次“小改动”到“大提升”:JVM堆内存与线程栈大小调优实践
jvm
J_liaty1 小时前
Java工程师的JVM入门教程:从零理解Java虚拟机
java·开发语言·jvm
m0_748248942 小时前
C++ 数据类型
java·jvm·c++
很搞笑的在打麻将4 小时前
Java集合线程安全实践:从ArrayList数据迁移问题到synchronizedList解决方案
java·jvm·算法
坚持学习前端日记4 小时前
微服务模块化项目结构
java·jvm·微服务
有一个好名字5 小时前
【无标题】
java·开发语言·jvm
期待のcode5 小时前
Java虚拟机的垃圾对象判定
java·开发语言·jvm
期待のcode14 小时前
Java虚拟机的运行模式
java·开发语言·jvm
鱼跃鹰飞16 小时前
JMM 三大特性(原子性 / 可见性 / 有序性)面试精简版
java·jvm·面试
一颗青果18 小时前
进程组 | 会话 |终端 | 前台后台 | 守护进程
linux·运维·jvm