ZGC垃圾回收

ZGC是JDK 11引入的新的垃圾回收机制,宣称能hold住TB级别的heap,暂停时间在10ms下,并且吞吐量最多下降15%。

ZGC的特点:

  1. 全新: ZGC不是基于CMS或者G1优化的,是全新设计的。

  2. 使用了Load Barrier技术,而不是Store Barriors技术,zgc使用Load Barrier技术去跟踪堆的状态和对象的状态

  3. 不分代,ZGC是一个只有一个generation的回收器

  4. Partial Compaction,基于部分压缩,和G1一样

  5. Region-Base GC, 这点有点类似于G1,都是把内存分成region,但是不同于zgc的固定大小size的region,zgc更加灵活,region的大小可以不一样,这样可以更好地处理大对象的分配问题。

  6. immediate memory reuse: zgc和g1一样,region会被及时地清理、压缩和转移,可以让内存的复用更加及时

  7. NUMA-aware: 一种内存页合并的硬件技术

  8. Colored Object Pointer

  9. Concurrent: zgc的一个非常重要的能力,就是并行和并发处理的几乎一样的事情

  10. ZGC目前只支持Linux/x86_64

ZGC的heap region被称为 zpages,和G1相比,ZGC的region不会像G1那样一开始就被划分成固定大小的region。zpages的亮点是动态,具体表现是可以动态创建 和销毁,可以动态决定region的大小,其最小的单位是2MB的一个块,每个块的大小就是2MB的倍数。zpages有个概念叫做size groups,有三种:

  1. Small: 一个2MB的region

  2. Medium: 一个32MB的region

  3. Large: N * 2MB的region

Colored Pointer: 是zgc的一个核心概念,也被称做 tag pointers 或者 version pointers, metadata被保存在64位的pointer里,目前不支持32位的平台。

Load Barrier:

load barrier的作用是在对象从heap里load的时候,而且只有在这个地方用到了 laod barrier,一旦通过了Load Barrier并成功得到了对象,之后就可以任意地使用它,比如 访问字段、调用方法等。load barrier的作用主要是检查pointer是否是bad color。如果是一个bad color的pointer,那么就需要走一个慢的路径,餐区一些措施让其变成good color,下次load的时候,就可以走fast path了。

ZGC的过程:

  1. 初始标记: pause mark start

  2. 并发标记: Concurrent mark

  3. 重新分配阶段

Written on September 4, 2020