ZGC-垃圾收集器
Z Garbage Collector,即ZGC,是一个可伸缩的、低延迟的垃圾收集器,
ZGC的优点:
停顿时间不会超过10ms
停顿时间不会随着堆的增大而增大(不管多大的堆都能保持在10ms以下)
可支持几百M,甚至几T的堆大小(最大支持4T)
ZGC的特性:
Concurrent :
ZGC只有短暂的STW,大部分的过程都是和应用线程并发执行,比如最耗时的并发标记和并发移动过程。
Region-based :
ZGC中没有新生代和老年代的概念,只有一块一块的内存区域page,以page单位进行对象的分配和回收。
Compacting :
每次进行GC时,都会对page进行压缩操作,所以完全避免了CMS算法中的碎片化问题。
NUMA-aware :
多CPU插槽的服务器都是Numa架构
ZGC默认支持NUMA架构,
在创建对象时,根据当前线程在哪个CPU执行,优先在靠近这个CPU的内存进行分配,
这样可以显著的提高性能,在SPEC JBB 2005 基准测试里获得40%的提升。
Using colored pointers和以往的标记算法比较不同,
CMS和G1会在对象的对象头进行标记,而ZGC是标记对象的指针。
其中低42位对象的地址,42-45位用来做指标标记。
Using load barriers
因为在标记和移动过程中,GC线程和应用线程是并发执行的,
所以存在这种情况:对象A内部的引用所指的对象B在标记或者移动状态,
为了保证应用线程拿到的B对象是对的,
那么在读取B的指针时会经过一个 “load barriers” 读屏障,这个屏障可以保证在执行GC时,数据读取的正确性。
注意:ZGC目前只在Linux/x64上可用
|
|