ZGC指南
所属分类 ZGC
浏览量 1122
ZGC保证应用延迟不超过10毫秒
The Z Garbage Collector, also known as ZGC, is a scalable low latency garbage collector designed to meet the following goals:
Pause times do not exceed 10ms
Pause times do not increase with the heap or live-set size
Handle heaps ranging from a few hundred megabytes to multi terabytes in size
ZGC特性
并发(concurrent)GC
它可以标记内存,复制和迁移(relocate)内存,所有的操作都是并发的,同时它有一个并发的引用处理器
其它的垃圾收集器使用store barriers,ZGC使用load barriers,用于跟踪内存
lock->unlock->read->load 读内存
use->assign->store->write 写内存
ZGC可以更加灵活的配置大小和策略,相比于G1,它可以更好的处理非常大(very large)对象的释放
ZGC只有一代,没有新生代,老年代什么的,但是ZGC可以支持局部压缩,在内存恢复和迁移(reclaim and relocate)时,ZGC仍然有很高的性能
ZGC依赖NUMA-aware(非均衡存储器访问),需要内存支持这种特点
不分代,jstat 结果
/home/admin/softwares/jdk-14.0.2/bin/jstat -gc 1976902 2000
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT CGC CGCT GCT
- - - - - - 52428800.0 65536.0 9216.0 8976.1 0.0 0.0 - - - - 156 0.028 0.028
- - - - - - 52428800.0 65536.0 9216.0 8976.1 0.0 0.0 - - - - 156 0.028 0.028
ZGC 发展历程
JDK11,2018年 9月
ZGC发布
不支持类的卸载 ,-XX:+ClassUnloading 不生效
JDK12 2019年 3月
支持并发的类卸载
暂停时间进一步缩短
JDK13 2019年 9月
最大堆内存从4TB -> 16TB
支持归还未使用的内存 uncommitting unused memory
支持Linux与/AArch64平台
减少时间到一个固定的时间点之下 (Reduced Time-To-Safepoint)
支持 -XX:SoftMaxHeapSize ,尽量在指定的内存大小之下,除非为了避免内存溢出
JDK 14 计划在2020年3月
增加稳定性
支持不连续的地址空间
几个GC相关的术语
parallel 多个垃圾收集线程在一起工作,应用可能会停止
serial 垃圾收集器只有一个线程在工作
stop the world 应用程序停止
concurrent 垃圾收集器在后台运行,应用程序同时也在运行
incremental 在垃圾收集工作结束之前,先停止垃圾收集,等一会再过来完成剩下的工作
ZGC引入了两个新的概念 pointer coloring 和 load barriers
Point Coloring
这个特性让ZGC能够发现,标记,定位和重新映射对象,它只能工作在64位的操作系统上,
实现colored pointer需要虚拟地址(virtual address masking)
unused bits 18
finalizable 1
remapped 1
marked1 1
marked0 1
Object Address 42
finalizable 对象可以被finalizer到达
marked0 和 marked1 标记可达的对象
remappaed 引用指针到当前对象的地址,对象可能会被relocate,这个地址表示对象被relocate
Load Barrier
load barrier是一段代码,当线程从堆中加载引用的时候被运行。
在ZGC中,load barrier检查引用的元数据位,根据元数据位对引用的对象做一些处理,
在获取对象的时候对象的引用可能会被修改掉,但是不影响使用
-XX:+UnlockExperimentalVMOptions -XX:+UseZGC
-Xlog:gc
-Xlog:gc*:gc.log
更加详细的ZGC日志信息
启用NUMA
-XX:+UseNUMA
停用NUMA
-XX:-UseNUMA
-XX:ConcGCThreads=3
# 多久未提交的内存会返回给系统
-XX:+ZUncommit -XX:ZUncommitDelay=< seconds >
通用GC选项
-XX:MinHeapSize, -Xms
-XX:InitialHeapSize, -Xms
-XX:MaxHeapSize, -Xmx
-XX:SoftMaxHeapSize
-XX:SoftRefLRUPolicyMSPerMB
ZGC选项
-XX:ZAllocationSpikeTolerance
-XX:ZCollectionInterval
-XX:ZFragmentationLimit
-XX:ZMarkStackSpaceLimit
-XX:ZPath
-XX:ZUncommit -XX:ZUncommitDelay
ZGC 诊断选项-XX
+UnlockDiagnosticVMOptions
-XX:ZProactive
-XX:ZStatisticsInterval
-XX:ZVerifyForwarding
-XX:ZVerifyMarking
-XX:ZVerifyObjects
-XX:ZVerifyRoots
-XX:ZVerifyViews
上一篇
下一篇
java NIO SocketChannel
Java NIO 内存映射文件
java随机数生成器
java GC 进化
CMS G1 ZGC 堆内存区别
ZGC特性简介