PackedConcurrentHistogram guarantees lossless recording of values into the histogram even when the
histogram is updated by multiple threads, and supports auto-resize and shift operations that may
result from or occur concurrently with other recording operations.
PackedConcurrentHistogram tracks value counts in a packed internal representation optimized
for typical histogram recoded values are sparse in the value range and tend to be incremented in small unit counts.
This packed representation tends to require significantly smaller amounts of stoarge when compared to unpacked
representations, but can incur additional recording cost due to resizing and repacking operations that may
occur as previously unrecorded values are encountered.
It is important to note that concurrent recording, auto-sizing, and value shifting are the only thread-safe
behaviors provided by PackedConcurrentHistogram, and that it is not otherwise synchronized. Specifically,
PackedConcurrentHistogram provides no implicit synchronization that would prevent the contents of the
histogram from changing during queries, iterations, copies, or addition operations on the histogram. Callers
wishing to make potentially concurrent, multi-threaded updates that would safely work in the presence of
queries, copies, or additions of histogram objects should either take care to externally synchronize and/or
order their access, use Recorder or SingleWriterRecorder which are intended for
this purpose.
Auto-resizing: When constructed with no specified value range range (or when auto-resize is turned on with Histogram#setAutoResize) a PackedConcurrentHistogram will auto-resize its dynamic range to include recorded
values as they are encountered. Note that recording calls that cause auto-resizing may take longer to execute, as
resizing incurs allocation and copying of internal data structures.
See package description for org. for details.
| Modifier and Type | Class and Description |
|---|---|
| pack-priv static class |
| Access | Constructor and Description |
|---|---|
| public | PackedConcurrentHistogram(final int
Specifies the precision to use. This is the number of significant
decimal digits to which the histogram will maintain value resolution
and separation. Must be a non-negative integer between 0 and 5. numberOfSignificantValueDigits)Construct an auto-resizing ConcurrentHistogram with a lowest discernible value of 1 and an auto-adjusting highestTrackableValue. |
| public | PackedConcurrentHistogram(final long
The highest value to be tracked by the histogram. Must be a positive
integer that is >= 2. highestTrackableValue, final int Specifies the precision to use. This is the number of significant
decimal digits to which the histogram will maintain value resolution
and separation. Must be a non-negative integer between 0 and 5. numberOfSignificantValueDigits)Construct a ConcurrentHistogram given the Highest value to be tracked and a number of significant decimal digits. |
| public | PackedConcurrentHistogram(final long
The lowest value that can be tracked (distinguished from 0) by the histogram.
Must be a positive integer that is >= 1. May be internally rounded
down to nearest power of 2. lowestDiscernibleValue, final long The highest value to be tracked by the histogram. Must be a positive
integer that is >= (2 * lowestDiscernibleValue). highestTrackableValue, final int Specifies the precision to use. This is the number of significant
decimal digits to which the histogram will maintain value resolution
and separation. Must be a non-negative integer between 0 and 5. numberOfSignificantValueDigits)Construct a ConcurrentHistogram given the Lowest and Highest values to be tracked and a number of significant decimal digits. |
| public | PackedConcurrentHistogram(final AbstractHistogram
The source histogram to duplicate source)Construct a histogram with the same range settings as a given source histogram, duplicating the source's start/end timestamps (but NOT it's contents) |
| pack-priv | |
| pack-priv | PackedConcurrentHistogram(final long lowestDiscernibleValue, final long highestTrackableValue, final int numberOfSignificantValueDigits, boolean allocateCountsArray)
|
| Modifier and Type | Method and Description |
|---|---|
| pack-priv int | |
| pack-priv void | |
| pack-priv ConcurrentHistogram. | allocateArray(int length, int normalizingIndexOffset)
Overrides org. |
| pack-priv void | |
| public PackedConcurrentHistogram | copy()
Overrides org. |
| public PackedConcurrentHistogram | copyCorrectedForCoordinatedOmission(final long
If expectedIntervalBetweenValueSamples is larger than 0, add
auto-generated value records as appropriate if value is larger
than expectedIntervalBetweenValueSamples expectedIntervalBetweenValueSamples)Overrides org. |
| public static PackedConcurrentHistogram | Returns: The newly constructed histogramThe buffer to decode from buffer, final long Force highestTrackableValue to be set at least this high minBarForHighestTrackableValue)Hides org. |
| public static PackedConcurrentHistogram | Returns: The newly constructed histogramThe buffer to decode from buffer, final long Force highestTrackableValue to be set at least this high minBarForHighestTrackableValue)Hides org. |
| pack-priv synchronized void | fillBufferFromCountsArray(final ByteBuffer buffer)
Overrides org. |
| public static PackedConcurrentHistogram | Returns: A ConcurrentHistogram decoded from the stringA string containing a base64 encoding of a compressed histogram base64CompressedHistogramString)
Construct a new ConcurrentHistogram by decoding it from a String containing a base64 encoded
compressed histogram representation.
|
| public long | getTotalCount()
Overrides org. |
| pack-priv void | |
| private void | |
| pack-priv void |
| PackedConcurrentHistogram | back to summary |
|---|---|
| public PackedConcurrentHistogram(final int numberOfSignificantValueDigits) Construct an auto-resizing ConcurrentHistogram with a lowest discernible value of 1 and an auto-adjusting highestTrackableValue. Can auto-resize up to track values up to (Long.MAX_VALUE / 2).
| |
| PackedConcurrentHistogram | back to summary |
|---|---|
| public PackedConcurrentHistogram(final long highestTrackableValue, final int numberOfSignificantValueDigits) Construct a ConcurrentHistogram given the Highest value to be tracked and a number of significant decimal digits. The histogram will be constructed to implicitly track (distinguish from 0) values as low as 1.
| |
| PackedConcurrentHistogram | back to summary |
|---|---|
| public PackedConcurrentHistogram(final long lowestDiscernibleValue, final long highestTrackableValue, final int numberOfSignificantValueDigits) Construct a ConcurrentHistogram given the Lowest and Highest values to be tracked and a number of significant decimal digits. Providing a lowestDiscernibleValue is useful is situations where the units used for the histogram's values are much smaller that the minimal accuracy required. E.g. when tracking time values stated in nanosecond units, where the minimal accuracy required is a microsecond, the proper value for lowestDiscernibleValue would be 1000.
| |
| PackedConcurrentHistogram | back to summary |
|---|---|
| public PackedConcurrentHistogram(final AbstractHistogram source) Construct a histogram with the same range settings as a given source histogram, duplicating the source's start/end timestamps (but NOT it's contents)
| |
| PackedConcurrentHistogram | back to summary |
|---|---|
| pack-priv PackedConcurrentHistogram(final AbstractHistogram source, boolean allocateCountsArray) | |
| PackedConcurrentHistogram | back to summary |
|---|---|
| pack-priv PackedConcurrentHistogram(final long lowestDiscernibleValue, final long highestTrackableValue, final int numberOfSignificantValueDigits, boolean allocateCountsArray) | |
| _getEstimatedFootprintInBytes | back to summary |
|---|---|
| pack-priv int _getEstimatedFootprintInBytes() Overrides org.
| |
| addToTotalCount | back to summary |
|---|---|
| pack-priv void addToTotalCount(final long value) Overrides org.
| |
| allocateArray | back to summary |
|---|---|
| pack-priv ConcurrentHistogram. Overrides org.
| |
| clearCounts | back to summary |
|---|---|
| pack-priv void clearCounts() Overrides org.
| |
| copy | back to summary |
|---|---|
| public PackedConcurrentHistogram copy() Overrides org. Doc from org. Create a copy of this histogram, complete with data and everything.
| |
| copyCorrectedForCoordinatedOmission | back to summary |
|---|---|
| public PackedConcurrentHistogram copyCorrectedForCoordinatedOmission(final long expectedIntervalBetweenValueSamples) Overrides org. Doc from org. Get a copy of this histogram, corrected for coordinated omission. To compensate for the loss of sampled values when a recorded value is larger than the expected interval between value samples, the new histogram will include an auto-generated additional series of decreasingly-smaller (down to the expectedIntervalBetweenValueSamples) value records for each count found in the current histogram that is larger than the expectedIntervalBetweenValueSamples. Note This is a post-correction method, as opposed to the at-recording correction method provided
by See notes in the description of the Histogram calls for an illustration of why this corrective behavior is important.
| |
| decodeFromByteBuffer | back to summary |
|---|---|
| public static PackedConcurrentHistogram decodeFromByteBuffer(final ByteBuffer buffer, final long minBarForHighestTrackableValue) Hides org. Construct a new histogram by decoding it from a ByteBuffer.
| |
| decodeFromCompressedByteBuffer | back to summary |
|---|---|
| public static PackedConcurrentHistogram decodeFromCompressedByteBuffer(final ByteBuffer buffer, final long minBarForHighestTrackableValue) throws DataFormatException Hides org. Construct a new histogram by decoding it from a compressed form in a ByteBuffer.
| |
| fillBufferFromCountsArray | back to summary |
|---|---|
| pack-priv synchronized void fillBufferFromCountsArray(final ByteBuffer buffer) Overrides org.
| |
| fromString | back to summary |
|---|---|
| public static PackedConcurrentHistogram fromString(final String base64CompressedHistogramString) throws DataFormatException Hides org. Construct a new ConcurrentHistogram by decoding it from a String containing a base64 encoded compressed histogram representation.
| |
| getTotalCount | back to summary |
|---|---|
| public long getTotalCount() Overrides org. Doc from org. Get the total count of all recorded values in the histogram
| |
| incrementTotalCount | back to summary |
|---|---|
| pack-priv void incrementTotalCount() Overrides org.
| |
| readObject | back to summary |
|---|---|
| private void readObject(final ObjectInputStream o) throws IOException, ClassNotFoundException | |
| setTotalCount | back to summary |
|---|---|
| pack-priv void setTotalCount(final long totalCount) Overrides org.
| |
| Modifier and Type | Field and Description |
|---|---|
| private double | |
| private int | |
| private ConcurrentPackedLongArray |
| Access | Constructor and Description |
|---|---|
| pack-priv |
| Modifier and Type | Method and Description |
|---|---|
| public void | atomicAdd(int index, long valueToAdd)
Implements org. |
| public void | |
| public long | get(int index)
Implements org. |
| public double | |
| public int | |
| public int | |
| public void | lazySet(int index, long newValue)
Implements org. |
| public int | |
| public void | setDoubleToIntegerValueConversionRatio(double doubleToIntegerValueConversionRatio)
|
| public void | setNormalizingIndexOffset(int normalizingIndexOffset)
Implements org. |
| doubleToIntegerValueConversionRatio | back to summary |
|---|---|
| private double doubleToIntegerValueConversionRatio | |
| normalizingIndexOffset | back to summary |
|---|---|
| private int normalizingIndexOffset | |
| packedCounts | back to summary |
|---|---|
| private ConcurrentPackedLongArray packedCounts | |
| ConcurrentPackedArrayWithNormalizingOffset | back to summary |
|---|---|
| pack-priv ConcurrentPackedArrayWithNormalizingOffset(int length, int normalizingIndexOffset) | |
| atomicAdd | back to summary |
|---|---|
| public void atomicAdd(int index, long valueToAdd) Implements org.
| |
| atomicIncrement | back to summary |
|---|---|
| public void atomicIncrement(int index) Implements org.
| |
| get | back to summary |
|---|---|
| public long get(int index) Implements org.
| |
| getDoubleToIntegerValueConversionRatio | back to summary |
|---|---|
| public double getDoubleToIntegerValueConversionRatio() | |
| getEstimatedFootprintInBytes | back to summary |
|---|---|
| public int getEstimatedFootprintInBytes() Implements org.
| |
| getNormalizingIndexOffset | back to summary |
|---|---|
| public int getNormalizingIndexOffset() Implements org. | |
| lazySet | back to summary |
|---|---|
| public void lazySet(int index, long newValue) Implements org.
| |
| length | back to summary |
|---|---|
| public int length() Implements org.
| |
| setDoubleToIntegerValueConversionRatio | back to summary |
|---|---|
| public void setDoubleToIntegerValueConversionRatio(double doubleToIntegerValueConversionRatio) | |
| setNormalizingIndexOffset | back to summary |
|---|---|
| public void setNormalizingIndexOffset(int normalizingIndexOffset) Implements org. | |