ZGC收集器

ZGC收集器

ZGC收集器:JDK11加入的具有实验性质的低延迟收集器

ZGC的设计目标:支持TB级内存容量,暂停时间低(< 10ms),对整个程序吞吐量的影响小于15%

ZGC里面的技术:着色指针 和 读屏障

linux 64 位 :前面18位不能用于寻址,后面48位都可以

zgc使用的是前面4位

指针存储一些数据或者信息的叫做着色指针

GC性能指标

吞吐量=应用代码执行的时间/运行的总时间(代码执行的时间+GC执行的时间)

GC负荷,与吞吐量相反,是GC时间/运行的总时间

暂停时间,就是发生 Stop-the-World的总时间

GC频率,就是GC在一个时间段发生的次数

反应速度,就是从对象成为垃圾到被回收的时间

交互式应用通常希望暂停时间越少越好

新生代在堆内存的 3/8 ~ 50%之间

JVM内存配置原则:

新生代尽可能设置大点,如果太小会导致:

  1. YGC次数更加频繁
  2. 可能会导致YGC的对象进入老年代,如果此时老年代满了,会触发GC

对于老年代,针对响应时间优先的应用:由于老年代通常采用并发收集器,因此其大小要综合考虑并发量和并发持续时间等参数

如果设置小了,可能会造成内存碎片,高回收频率会导致应用暂停

如果设置大了,会需要较长的回收时间

对老年代,针对吞吐量优先的应用:通常设置较大的新生代和较小的老年代,这样可以尽可能回收大部分短期对象,减少中期对象,而老年代尽量存放长期存活的对象。

依据对象的存活周期进行分类,对象优先在新生代分配,长时间存活的对象进入老年代

根据不同代的特点:选取合适的收集算法,少量对象存活,适合复制算法;大量对象存活,适合标记清除或标记整理

垃圾收集器:了解串行收集器和并行收集器、理解新生代Parallel Scaverge收集器、理解CMS、G1

---- The end of this article ----