首页  

ZGC垃圾回收触发机制     所属分类 ZGC 浏览量 149
ZGC触发逻辑,zDirector.cpp

void ZDirector::run_service() {
  // Main loop
  while (_metronome.wait_for_tick()) {
    sample_allocation_rate();
    const GCCause::Cause cause = make_gc_decision();
    if (cause != GCCause::_no_gc) {
      ZCollectedHeap::heap()->collect(cause);
    }
  }
}

_metronome.wait_for_tick() 
每100ms执行一次make_gc_decision(),决定是否执行ZGC

rule_timer  rule_warmup rule_allocation_rate  rule_proactive

 

阻塞内存分配请求触发 当垃圾来不及回收,垃圾将堆占满时,会导致部分线程阻塞 应当避免出现这种触发方式,日志关键字 Allocation Stall 基于分配速率的自适应算法 最主要的GC触发方式, ZGC根据近期的对象分配速率以及GC时间,计算出当内存占用达到什么阈值时触发下一次GC ZAllocationSpikeTolerance 参数控制阈值大小,默认2,数值越大,越早触发GC 日志关键字 Allocation Rate 基于固定时间间隔 ZCollectionInterval ,适合应对突增流量场景 流量平稳变化时,自适应算法可能在堆使用率达到95%以上才触发GC 流量突增时,自适应算法触发的时机可能会过晚,导致部分线程阻塞 日志关键字 Timer 主动触发规则 类似于固定间隔规则,但时间间隔不固定,是ZGC自行算出来的,我们的服务因为已经 加了基于固定时间间隔的触发机制,可关闭该规则 -ZProactive 关闭,避免GC频繁 日志关键字 Proactive 预热规则 服务刚启动时出现,一般不需要关注 ,日志关键字 Warmup 外部触发 代码中显式调用System.gc() ,日志关键字 System.gc() 元数据分配触发 元数据区不足时触发,一般不需要关注 ,日志关键字 Metadata GC Threshold

上一篇     下一篇
java GC 进化

CMS G1 ZGC 堆内存区别

ZGC特性简介

busybox简介

Linux ps命令

linux运维常用命令