Package com.codahale.metrics
Class ExponentiallyDecayingReservoir
java.lang.Object
com.codahale.metrics.ExponentiallyDecayingReservoir
- All Implemented Interfaces:
Reservoir
An exponentially-decaying random reservoir of
long
s. Uses Cormode et al's
forward-decaying priority reservoir sampling method to produce a statistically representative
sampling reservoir, exponentially biased towards newer entries.- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final double
private final Clock
private final AtomicLong
private static final double
private static final int
private final ReentrantReadWriteLock
private final AtomicLong
private static final long
private final int
private long
private final ConcurrentSkipListMap
<Double, Long> -
Constructor Summary
ConstructorsConstructorDescriptionCreates a newExponentiallyDecayingReservoir
of 1028 elements, which offers a 99.9% confidence level with a 5% margin of error assuming a normal distribution, and an alpha factor of 0.015, which heavily biases the reservoir to the past 5 minutes of measurements.ExponentiallyDecayingReservoir
(int size, double alpha) Creates a newExponentiallyDecayingReservoir
.ExponentiallyDecayingReservoir
(int size, double alpha, Clock clock) Creates a newExponentiallyDecayingReservoir
. -
Method Summary
Modifier and TypeMethodDescriptionprivate long
Returns a snapshot of the reservoir's values.private void
private void
private void
rescale
(long now, long next) private void
int
size()
Returns the number of values recorded.private void
private void
void
update
(long value) Adds a new recorded value to the reservoir.void
update
(long value, long timestamp) Adds an old value with a fixed timestamp to the reservoir.private double
weight
(long t)
-
Field Details
-
DEFAULT_SIZE
private static final int DEFAULT_SIZE- See Also:
-
DEFAULT_ALPHA
private static final double DEFAULT_ALPHA- See Also:
-
RESCALE_THRESHOLD
private static final long RESCALE_THRESHOLD -
values
-
lock
-
alpha
private final double alpha -
size
private final int size -
count
-
startTime
private volatile long startTime -
nextScaleTime
-
clock
-
-
Constructor Details
-
ExponentiallyDecayingReservoir
public ExponentiallyDecayingReservoir()Creates a newExponentiallyDecayingReservoir
of 1028 elements, which offers a 99.9% confidence level with a 5% margin of error assuming a normal distribution, and an alpha factor of 0.015, which heavily biases the reservoir to the past 5 minutes of measurements. -
ExponentiallyDecayingReservoir
public ExponentiallyDecayingReservoir(int size, double alpha) Creates a newExponentiallyDecayingReservoir
.- Parameters:
size
- the number of samples to keep in the sampling reservoiralpha
- the exponential decay factor; the higher this is, the more biased the reservoir will be towards newer values
-
ExponentiallyDecayingReservoir
Creates a newExponentiallyDecayingReservoir
.- Parameters:
size
- the number of samples to keep in the sampling reservoiralpha
- the exponential decay factor; the higher this is, the more biased the reservoir will be towards newer values
-
-
Method Details
-
size
public int size()Description copied from interface:Reservoir
Returns the number of values recorded. -
update
public void update(long value) Description copied from interface:Reservoir
Adds a new recorded value to the reservoir. -
update
public void update(long value, long timestamp) Adds an old value with a fixed timestamp to the reservoir.- Parameters:
value
- the value to be addedtimestamp
- the epoch timestamp ofvalue
in seconds
-
rescaleIfNeeded
private void rescaleIfNeeded() -
getSnapshot
Description copied from interface:Reservoir
Returns a snapshot of the reservoir's values.- Specified by:
getSnapshot
in interfaceReservoir
- Returns:
- a snapshot of the reservoir's values
-
currentTimeInSeconds
private long currentTimeInSeconds() -
weight
private double weight(long t) -
rescale
private void rescale(long now, long next) -
unlockForRescale
private void unlockForRescale() -
lockForRescale
private void lockForRescale() -
lockForRegularUsage
private void lockForRegularUsage() -
unlockForRegularUsage
private void unlockForRegularUsage()
-