前言
在之前的这篇文章中,我们已经介绍了几种常见的垃圾回收器的组合。
这些垃圾回收器虽然实现上各有不同,但有一点是相同的——都是基于物理上的内存分代模型。
也就是内存中青年代和老年代的比例都提前固定了,并且必须是连续的内存地址空间。
但随着内存的不断变大,任何已经介绍过的垃圾回收器都很难在特别大的内存中保证性能。
传统的垃圾回收器的内存模型已经很难跟得上硬件的发展了,这个时候就需要介绍一个新的垃圾回收器——G1垃圾回收器
。
G1垃圾回收器打破了之前物理内存分代的传统模型,通过将内存分为大小相同的小单元进行管理,提升GC的性能。
下面我们先来介绍G1基本的运行原理.
G1的底层结构
G1将内存划分为大小一致(1M ~ 32M)的小块内存,我们称每块内存为region
。
这些region可以属于不同的内存分代,可以是老年代、Eden区、Survivor区,或者是H区用来代表大对象。如下图所示:
与这个底层内存结构相适应的有两个概念需要记住,分别是CSet
和RSet
。
CSet:也叫Collection Set,这个set中装着需要被回收的region。
RSet:也叫Remembered Set,每个region都有一个RSet,记录着有哪些region中有引用指向本region中的对象。这个set可以有效