A ConcurrentHistogram 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.

It is important to note that concurrent recording, auto-sizing, and value shifting are the only thread-safe
behaviors provided by ConcurrentHistogram, and that it is not otherwise synchronized. Specifically, ConcurrentHistogram 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 the SynchronizedHistogram variant, or (recommended) 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 AbstractHistogram.setAutoResize(boolean)) a Histogram 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.

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).

Parameters:

numberOfSignificantValueDigits 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.

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.

Parameters:

highestTrackableValue The highest value to be tracked by the histogram. Must be a positive
integer that is >= 2.

numberOfSignificantValueDigits 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.

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.

Parameters:

lowestDiscernibleValue 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.

highestTrackableValue The highest value to be tracked by the histogram. Must be a positive
integer that is >= (2 * lowestDiscernibleValue).

numberOfSignificantValueDigits 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.