
文章插图
我们可以看到整个流程分为三个阶段:
- YoungCollection:新生代阶段
- YoungCollection+ConcurrentMark:新生代阶段+并发标记阶段
- MixedCollection:混合收集阶段

文章插图
我们对其进行解释:
- E就是伊甸园,S就是幸存区,O就是老年代
- 其产生的正常流程就和分代垃圾回收机制一样,但这阶段不会产生GC

文章插图
我们对其进行解释:
- 其字符含义完全相同
- 当新生代内存占满后进行Young GC时会同时进行GC Root的初始标记
- 老年代占用堆空间比例达到阈值时,进行并发标记(不会产生STW),阈值可以控制
// 阈值控制-XX:InitiatingHeapOccupancyPercent=percent (默认45%)
Mixed Collection我们首先给出该阶段的展示图:
文章插图
我们对其进行解释:
- 其字符含义完全相同
- 但该阶段会对E , S,O进行全面垃圾回收
- 其中最终标记(Remark)和拷贝存活(Evacation)都会STW(我们均会在后面解释)
- Mixed Collection可能并不会将所有老年代的数据都删除
- 它会根据你设置的最大暂停时间来进行抉择,如果时间不足以删除所有老年代数据,就会挑选部分较大的内存数据进行回收
- SerialGC(串行垃圾回收)
- 新生代内存不足时发生的垃圾收集 - minor gc
- 老年代内存不足时发生的垃圾收集 - full gc
- ParalllelGC(吞吐量优先垃圾回收)
- 新生代内存不足时发生的垃圾收集 - minor gc
- 老年代内存不足时发生的垃圾收集 - full gc
- CMS(响应时间优先垃圾回收)
- 新生代内存不足时发生的垃圾收集 - minor gc
- 老年代内存不足时优先进行标记操作同步垃圾回收,当内存完全占满后才采用full gc
- G1(Garbage First)
- 新生代内存不足时发生的垃圾收集 - minor gc
- 老年代内存不足时优先进行MixedCollection同步垃圾回收,当内存完全占满后才采用full gc
但其实这个Region并不仅仅只分为了E,S,O三个空间,此外还包括以下空间:
- RSet(Remember Set :记忆集合)
/*每一个Region都会划出一部分内存用来储存记录其他Region对当前持有Rset Region中Card的引用针对G1的垃圾回收时间设置较短,在进行标记过程中可能会导致时间过长,所以我们设置了RSet来储存部分信息我们可以直接通过扫描每块Region里面的RSet来分析垃圾比例最高的Region区,放入CSet中,进行回收 。*/
- CSet(Collection Set 回收集合)
/*收集集合代表每次GC暂停时回收的一系列目标分区 。在任意一次收集暂停中,CSet所有分区都会被释放,内部存活的对象都会被转移到分配的空闲分区中 。年轻代收集CSet只容纳年轻代分区,而混合收集会通过启发式算法,在老年代候选回收分区中,筛选出回收收益最高的分区添加到CSet中 。*/
新生代跨代引用由于我们的初次标记时会去寻找Root部分但其实大部分的Root都放入了老年代,但老年底数据较多难以查找,所以G1提供了一种方法:
- 将老年代O再次划分为多个区间,名为卡
- 如果该卡中存储了Root部分,那么就将该卡标记为脏卡,同时放于RSet中存储起来便于查找

文章插图
同时如果该Root地址发生变化,G1给出了另外的方法进行更换:
- 在引用变更时通过post-write barrier + dirty card queue
- concurrent refinement threads 更新 Remembered Set

推荐阅读
- 黑莓q5用安装微信的方法a 用黑莓自带的印象笔记手敲的 看不懂的宝宝们在私聊我吧
- JVM学习笔记——内存结构篇
- 【lwip】08-ARP协议一图笔记及源码实现
- 小米笔记本Pro15增强版评测_小米笔记本Pro15增强版评测表现
- 用一台笔记本电脑如何赚钱(笔记本电脑赚钱的办法)
- 四 【单片机入门】应用层软件开发的单片机学习之路-----ESP32开发板PWM控制电机以及中断的使用
- 笔记本电脑CF中烟雾头怎么调(win10cf新版本烟雾保护头怎么调)
- 笔记本电脑配置高低怎么区分(笔记本电脑看什么配置判断好坏)
- pytorch、paddlepaddle等环境搭建 深度学习环境搭建常用网址、conda/pip命令行整理
- 三十九 Java开发学习----SpringBoot整合mybatis