ZGC:jdk11试验性质的低延迟垃圾回收器
Posted 猿人课堂
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZGC:jdk11试验性质的低延迟垃圾回收器相关的知识,希望对你有一定的参考价值。
刷文章看到了ZGC的介绍,感觉很牛啊,又看了看文档,做下记录
指标
先看指标,128G的堆,复合模式下的性能,看GC停顿时间
ZGC
avg: 1.091ms (+/-0.215ms)
95th percentile: 1.380ms
99th percentile: 1.512ms
99.9th percentile: 1.663ms
99.99th percentile: 1.681ms
max: 1.681ms
G1
avg: 156.806ms (+/-71.126ms)
95th percentile: 316.672ms
99th percentile: 428.095ms
99.9th percentile: 543.846ms
99.99th percentile: 543.846ms
max: 543.846ms
吓人不,使用ZGC竟然可以稳定在2ms以内!
描述
看看为啥ZGC能这么快
At a glance, ZGC is a concurrent, single-generation, region-based, NUMA-aware, compacting collector. Stop-the-world phases are limited to root scanning, so GC pause times do not increase with the size of the heap or the live set.
前一句都是使用的技术,后一句是主要内容,stw仅限在根扫描的过程中,所以GC停顿时间并不随着堆的增大而上升。
回忆CMS回收的几个阶段
初始标记,此阶段也是从GC ROOT进行可达性分析,stw
并发标记,上一阶段标记的对象触发,所有可达的对象标记,由于是并发所以不会stw
重标记,上一阶段由于是并发,在标记过程中会产生新对象,所以这次重新标记所有可达对象,stw
并发清理
而ZGC通过技术手段把stw的情况控制在仅有一次,就是第一次的初始标记才会发生,这样也就不难理解为什么GC停顿时间不随着堆增大而上升了,再大我也是通过并发的时间去回收了
还有一点需要关注就是停顿时间的减少会不会造成吞吐量的上升?原文解释
No more than 15% application throughput reduction compared to using G1
和G1相比,减少的吞吐量不会超过15%
关键技术
具体使用的什么手段做到只做一次根扫描就能实现垃圾回收呢
有色指针(Colored Pointers)
加载屏障(Load Barrier)
以上是关于ZGC:jdk11试验性质的低延迟垃圾回收器的主要内容,如果未能解决你的问题,请参考以下文章