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扫描到
相关推荐
weixin_586061464 小时前
JavaScript中Redux-Thunk处理异步Action的任务流
jvm·数据库·python
2401_897190555 小时前
Golang怎么写TODO待办应用_Golang TODO应用教程【深入】
jvm·数据库·python
m0_678485455 小时前
CSS实现浮动图标与文本居中对齐_配合浮动与flex
jvm·数据库·python
2401_887724505 小时前
uni-app动画效果实现 uni-app如何使用animation API
jvm·数据库·python
m0_748839495 小时前
mysql如何处理不走索引的OR查询_使用UNION ALL优化重写
jvm·数据库·python
2401_887724505 小时前
在 Ubuntu Core 上部署 Go Web 服务的完整实践指南
jvm·数据库·python
Polar__Star5 小时前
C#怎么实现Redis分布式缓存 C#如何在ASP.NET Core中集成Redis实现分布式缓存方案【架构】
jvm·数据库·python
qq_206901395 小时前
如何在 WordPress 中通过邮箱获取用户 ID(PHP 实现)
jvm·数据库·python
俺不要写代码6 小时前
C++并发基本概念及实现、进程、基本概念
网络·jvm
Polar__Star6 小时前
HTML函数在多GPU系统中如何调用_显卡切换机制说明【汇总】
jvm·数据库·python