G1中提供了三种模式垃圾回收模式,Young GC、Mixed GC 和 Full GC,在不同的条件
下被触发
Young GC
Young GC主要是对Eden区进行GC,它在Eden空间耗尽时会被触发。
Eden 空间的数据移动到Survivor空间中,如果Survivor空间不够,Eden空间的部分
数据会直接晋升到年老代空间。
Survivor 区的数据移动到新的Survivor区中,也有部分数据晋升到老年代空间中。
最终 Eden空间的数据为空,GC停止工作,应用线程继续执行。
Remembered Set(已记忆集合)
在GC年轻代的对象时,我们如何找到年轻代中对象的根对象呢?
根对象可能是在年轻代中,也可以在老年代中,那么老年代中的所有对象都是根么?
如果全量扫描老年代,那么这样扫描下来会耗费大量的时间。
于是,G1引进了RSet的概念。它的全称是Remembered Set,其作用是跟踪指向某个堆
内的对象引用
每个 Region初始化时,会初始化一个RSet,该集合用来记录并跟踪其它Region指向该
Region中对象的引用,每个Region默认按照512Kb划分成多个Card,所以RSet需要记录
的东西应该是 xx Region的 xx Card
Mixed GC
当越来越多的对象晋升到老年代old region时,为了避免堆内存被耗尽,虚拟机会触发一
个混合的垃圾收集器,即Mixed GC,该算法并不是一个Old GC,除了回收整个Young
Region,还会回收一部分的Old Region,这里需要注意:是一部分老年代,而不是全部
老年代,可以选择哪些old region进行收集,从而可以对垃圾回收的耗时时间进行控制。
也要注意的是Mixed GC 并不是 Full GC
G1垃圾收集器
最新推荐文章于 2022-01-22 11:41:42 发布