Package org.apache.logging.log4j.util
Class Unbox
java.lang.Object
org.apache.logging.log4j.util.Unbox
Utility for preventing primitive parameter values from being auto-boxed. Auto-boxing creates temporary objects
which contribute to pressure on the garbage collector. With this utility users can convert primitive values directly
into text without allocating temporary objects.
Example usage:
import static org.apache.logging.log4j.util.Unbox.box;
...
long longValue = 123456L;
double doubleValue = 3.14;
// prevent primitive values from being auto-boxed
logger.debug("Long value={}, double value={}", box(longValue), box(doubleValue));
This class manages a small thread-local ring buffer of StringBuilders.
Each time one of the box() methods is called, the next slot in the ring buffer is used, until the ring
buffer is full and the first slot is reused. By default the Unbox ring buffer has 32 slots, so user code can
have up to 32 boxed primitives in a single logger call.
If more slots are required, set system property log4j.unbox.ringbuffer.size to the desired ring buffer size.
Note that the specified number will be rounded up to the nearest power of 2.
- Since:
- 2.6
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static classprivate static classState implementation that only puts JDK classes in ThreadLocals, so this is safe to be used from web applications. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final intprivate static final Loggerprivate static final intprivate static final intprivate static final intprivate static ThreadLocal<Unbox.State> private static Unbox.WebSafeState -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic StringBuilderbox(boolean value) Returns aStringBuildercontaining the text representation of the specified primitive value.static StringBuilderbox(byte value) Returns aStringBuildercontaining the text representation of the specified primitive value.static StringBuilderbox(char value) Returns aStringBuildercontaining the text representation of the specified primitive value.static StringBuilderbox(double value) Returns aStringBuildercontaining the text representation of the specified primitive value.static StringBuilderbox(float value) Returns aStringBuildercontaining the text representation of the specified primitive value.static StringBuilderbox(int value) Returns aStringBuildercontaining the text representation of the specified primitive value.static StringBuilderbox(long value) Returns aStringBuildercontaining the text representation of the specified primitive value.static StringBuilderbox(short value) Returns aStringBuildercontaining the text representation of the specified primitive value.private static intcalculateRingBufferSize(String propertyName) private static intceilingNextPowerOfTwo(int x) Calculate the next power of 2, greater than or equal to x.(package private) static intFor testing.private static StringBuildergetSB()private static Unbox.StategetState()
-
Field Details
-
LOGGER
-
BITS_PER_INT
private static final int BITS_PER_INT- See Also:
-
RINGBUFFER_MIN_SIZE
private static final int RINGBUFFER_MIN_SIZE- See Also:
-
RINGBUFFER_SIZE
private static final int RINGBUFFER_SIZE -
MASK
private static final int MASK -
threadLocalState
-
webSafeState
-
-
Constructor Details
-
Unbox
private Unbox()
-
-
Method Details
-
calculateRingBufferSize
-
ceilingNextPowerOfTwo
private static int ceilingNextPowerOfTwo(int x) Calculate the next power of 2, greater than or equal to x.From Hacker's Delight, Chapter 3, Harry S. Warren Jr.
- Parameters:
x- Value to round up- Returns:
- The next power of 2 from x inclusive
-
box
Returns aStringBuildercontaining the text representation of the specified primitive value. This method will not allocate temporary objects.- Parameters:
value- the value whose text representation to return- Returns:
- a
StringBuildercontaining the text representation of the specified primitive value
-
box
Returns aStringBuildercontaining the text representation of the specified primitive value. This method will not allocate temporary objects.- Parameters:
value- the value whose text representation to return- Returns:
- a
StringBuildercontaining the text representation of the specified primitive value
-
box
Returns aStringBuildercontaining the text representation of the specified primitive value. This method will not allocate temporary objects.- Parameters:
value- the value whose text representation to return- Returns:
- a
StringBuildercontaining the text representation of the specified primitive value
-
box
Returns aStringBuildercontaining the text representation of the specified primitive value. This method will not allocate temporary objects.- Parameters:
value- the value whose text representation to return- Returns:
- a
StringBuildercontaining the text representation of the specified primitive value
-
box
Returns aStringBuildercontaining the text representation of the specified primitive value. This method will not allocate temporary objects.- Parameters:
value- the value whose text representation to return- Returns:
- a
StringBuildercontaining the text representation of the specified primitive value
-
box
Returns aStringBuildercontaining the text representation of the specified primitive value. This method will not allocate temporary objects.- Parameters:
value- the value whose text representation to return- Returns:
- a
StringBuildercontaining the text representation of the specified primitive value
-
box
Returns aStringBuildercontaining the text representation of the specified primitive value. This method will not allocate temporary objects.- Parameters:
value- the value whose text representation to return- Returns:
- a
StringBuildercontaining the text representation of the specified primitive value
-
box
Returns aStringBuildercontaining the text representation of the specified primitive value. This method will not allocate temporary objects.- Parameters:
value- the value whose text representation to return- Returns:
- a
StringBuildercontaining the text representation of the specified primitive value
-
getState
-
getSB
-
getRingbufferSize
static int getRingbufferSize()For testing.
-