I noticed that ExpAvgMeasurement doesn't properly handle an add after an update when still in warmup mode. Here's a failing test:
@Test
public void testUpdateThenAdd() {
ExpAvgMeasurement avg = new ExpAvgMeasurement(100, 10);
avg.update(i -> 50);
avg.add(100);
Assert.assertEquals(67, avg.get().doubleValue(), 0.1);
}
It might make sense to consider the warmup phase done once any update happens.