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内存配置原则:
新生代尽可能设置大点,如果太小会导致:
- YGC次数更加频繁
- 可能会导致YGC的对象进入老年代,如果此时老年代满了,会触发GC
对于老年代,针对响应时间优先的应用:由于老年代通常采用并发收集器,因此其大小要综合考虑并发量和并发持续时间等参数
如果设置小了,可能会造成内存碎片,高回收频率会导致应用暂停
如果设置大了,会需要较长的回收时间
对老年代,针对吞吐量优先的应用:通常设置较大的新生代和较小的老年代,这样可以尽可能回收大部分短期对象,减少中期对象,而老年代尽量存放长期存活的对象。
依据对象的存活周期进行分类,对象优先在新生代分配,长时间存活的对象进入老年代
根据不同代的特点:选取合适的收集算法,少量对象存活,适合复制算法;大量对象存活,适合标记清除或标记整理
垃圾收集器:了解串行收集器和并行收集器、理解新生代Parallel Scaverge收集器、理解CMS、G1