Java长期支持版本Java11发布时推出了ZGC, 之后的Java12 -16均有ZGC的一些更新。然而Java17的新特性已经敲定,确定没有关于ZGC的相关更新,也从另一方面说明了至Java17 ZGC已经比较稳定,可以作为比较稳定的GC垃圾回收器。相信未来ZGC必定会成为主流的Java垃圾回收期,那么盘一盘ZGC就是必然的了。
1 ZGC从何而来,有什么好处
1.1 ZGC 的命名
根据OpenJDK官方网站的说明ZGC其实并没有什么特殊意义,就是一个名字而已。起初只是为了致敬ZFS 文件系统,表示ZGC与ZFS一样都是革命性的,是一个跨时代的产品。更像是一种崇拜命名法。所以ZGC就是要做革命性的与以往的垃圾回收器性能上有很大提高的GC。
1.2ZGC的好处及特点
ZGC是一个低延迟的可扩展GC,它有以下的目标
2. 暂停时间不会随着堆的大小,存活集及根集的大小的增加而增加
3. 支持8MB-16TB级别的堆大小
同时ZGC有如下标签:
- 并发
- 基于Region
- 堆压缩
- 彩色指针 (对象使用64的指针,有44位表示对象内存地址(如果是8TB , 4TB堆内存则会用到43,42位) ,其中有4位用于GC, 其余为备用 ),个别详情请看 http://hg.openjdk.java.net/jdk/jdk/rev/24f6b0e413a0
- 负载屏障
- NUMA支持 (每个CPU单独访问一块内存)