首页  

ZGC指南     所属分类 ZGC 浏览量 1044
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特性简介