君子以自强不息。
简介
G1 是一个响应时间优先的 GC 算法,用户可以设定整个 GC 过程的期望停顿时间,由参数 MaxGCPauseMillis 控制,默认值 200ms。不过它不是硬性条件,只是期望值,G1 会努力在这个目标停顿时间内完成垃圾回收的工作,但不能保证完成(比如我们设置了太小的停顿时间,新生代太大等)。
G1 如何满足用户期望?
停顿预测模型:G1 根据这个模型统计计算出来的历史数据来预测本次收集需要选择的堆分区数量,从而尽量满足用户设定的目标停顿时间。
G1 的预测逻辑
衰减平均值: 是一种简单的数学方法,用来计算一个数列的平均值,核心是给近期的数据更高的权重,即强调近期数据对结果的影响。
衰减标准差:
1 |
|
- davg 表示衰减均值。
- sigma() 返回一个系数,来自 G1ConfidencePercent(默认值为50,sigma为0.5)的配置,表示信赖度。
- dsd 表示衰减标准偏差。
- confidence_factor 表示可信度相关系数,confidence_factor 当样本数据不足时(小于5个)取一个大于1的值,并且样本数据越少该值越大。当样本数据大于5时 confidence_factor 取值为1。这是为了弥补样本数据不足,起到补偿作用。
- 方法的参数 TruncateSeq,顾名思义,是一个截断的序列,它只跟踪序列中最新的 n 个元素。在 G1 GC 过程中,每个可测量的步骤花费的时间都会记录到 TruncateSeq(继承了 AbsSeq)中,用来计算衰减均值、衰减变量、衰减标准偏差等。