zgc gc消息类型及触发时机

gc消息类型
触发zgc的消息有两种类型,一种是同步消息,一种是异步消息,对于同步消息来说,触发同步消息的线程会等待gc完成后才能继续运行,比如System.gc的消息就是一个同步消息,应用线程需要等待gc完成后才能继续运行,当上一次同步消息触发的gc还在进行中然后又收到另一个同步消息请求时,会按照顺序触发gc,异步消息是由类似固定触发时间间隔触发的消息类型,当由上一次异步消息引起的gc还在进行中时,如果再收到另一个异步消息的请求,那会会忽略掉新来的异步消息,也即异步消息会去重
同步消息触发时机
System.gc是代码中主动触发的同步消息发送方式,这是开发者认为jvm此时垃圾已经到了该清理的地步了,所以会主动触发gc,由于是同步消息类型,只有gc结束后,System.gc后面的代码才能继续执行
异步消息触发时机
1.固定时间间隔触发
ZCollectionInterval参数控制触发异步消息垃圾回收固定时间间隔,让gc以固定的频率被触发,比如固定每天的凌晨触发gc,这样等白天流量高峰时就不容易再次gc了
2.jvm启动时预热规则触发
jvm刚刚启动时,由于确实历史的数据触发gc规则,所以设计了启动时的触发规则,具体是指当jvm启动时发现堆内存达到10%,20%,30%时会主动触发异步gc消息,不过当启动过程结束后,这个规则也不会再次满足了
3.根据分配速率触发
zgc运行时会收集过去一段时间的gc次数,gc时间,程序内存分配速率,堆内存的空闲内存等参数,目的是根据空闲堆内存和程序内存分配速率预测堆内存空间什么时候会被耗尽,这样gc就可以在堆内存即将耗尽之前提前触发gc操作,避免进入oom.顺带说一句,这个规则中预测下一次gc触发的时间可以使用机器学习的线性回归模型预测,参数ZAllocationSpikeTolerance=2是控制这个模型预测值的,调大会使得尽快触发gc
这个gc触发规则无需任何参数控制,默认就存在的并开启的
4.主动触发规则
通过ZProactive参数来控制是否开启主动触发规则,默认开启,主动触发规则是指满足一下条件时会触发发送gc异步消息,条件1是从上一次gc回收到当前时间,应用程序的堆内存使用新增超过10%的堆内存大小,条件2是从上次过程回收到当前时间,时间已经过去了5分钟,满足以上两个条件时就会触发异步gc消息的发送
元空间分配触发规则
当发送元空间内存分配失败,首先会发送gc异步消息触发gc回收,如果能够会回收到足够的元空间内存,那么就返回成功,否则就发送同步消息触发gc回收操作,如果能够回收到足够的元空间内存,那么就返回成功,否则尝试扩展元空间内存,然后再进行内存分配。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值