ZGC 新特性
随着系统架构、软硬件设施的不断完善发展,更大内存的使用,更高的系统目标,要支持更大的并发、更低的延迟、更大的吞吐量,这个时候,传统的GC已经无法满足需求,新一代GC - ZGC便应用而生。
ZGC是并发垃圾回收器,基于分区(不同于分代垃圾回收),支持空间压缩,同时还引入了2个重要的特性,彩色指针和加载屏障
Concurrent
Region-based
Compacting
NUMA-aware
Using colored pointers
Using load barriers
ZGC能够在更大堆上表现的更好,同时也大大减小了暂停时间
最大暂停时间能控制在亚毫秒以内
暂停时间不会随着堆内存的增加而增加,不会因为活动对象集,Root对象集的增加而增加
能处理 8MB到16TB 大小的堆
什么是彩色指针、加载屏障?
彩色指针带来了很多方面的提升,特别是:
可以让我们在重定位/压缩阶段回收和重用内存,而不需要在一个完整的gc中采用标记和压缩算法,同时也降低了一些堆的开销
它允许我们拥有相对较少和简单的GC屏障。这有助于降低运行时开销。这也意味着更容易在解释器和JIT编译器中实现、优化和维护GC屏障代码
我们目前在有色指针中存储标记和重定位相关信息。然而,该方案的多用途特性允许我们存储任何类型的信息(只要我们能将其放入指针中),并让加载屏障根据该信息采取任何它想要的操作。我们相信这将为未来的许多功能奠定基础。举一个例子,在异构内存环境中,这可以用于跟踪堆访问模式,以指导GC重新定位决策,将很少使用的对象移动到冷存储中
ZGC堆模型
ZGC中的Z是什么意思呀?
他只是个名字而已,作者命名的灵感来自与ZFS (动态文件系统,ZFS出现时在很多方面都是革命性的),所以可以理解为新一代的GC
ZGC怎么读呢?
可以读作 "zed gee see" 或者 "zee gee see"
引文
http://openjdk.java.net/jeps/333
http://openjdk.java.net/jeps/377
http://openjdk.java.net/jeps/304
http://openjdk.java.net/jeps/351
https://wiki.openjdk.java.net/display/zgc/Main