Package com.fasterxml.jackson.core.util
Class InternCache
- java.lang.Object
-
- java.util.AbstractMap<K,V>
-
- java.util.concurrent.ConcurrentHashMap<java.lang.String,java.lang.String>
-
- com.fasterxml.jackson.core.util.InternCache
-
- All Implemented Interfaces:
java.io.Serializable
,java.util.concurrent.ConcurrentMap<java.lang.String,java.lang.String>
,java.util.Map<java.lang.String,java.lang.String>
public final class InternCache extends java.util.concurrent.ConcurrentHashMap<java.lang.String,java.lang.String>
Singleton class that adds a simple first-level cache in front of regular String.intern() functionality. This is done as a minor performance optimization, to avoid calling native intern() method in cases where same String is being interned multiple times.Note: that this class extends
LinkedHashMap
is an implementation detail -- no code should ever directly call Map methods.- See Also:
- Serialized Form
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class java.util.concurrent.ConcurrentHashMap
java.util.concurrent.ConcurrentHashMap.KeySetView<K extends java.lang.Object,V extends java.lang.Object>
-
-
Field Summary
Fields Modifier and Type Field Description static InternCache
instance
private java.lang.Object
lock
As minor optimization let's try to avoid "flush storms", cases where multiple threads might try to concurrently flush the map.private static int
MAX_ENTRIES
Size to use is somewhat arbitrary, so let's choose something that's neither too small (low hit ratio) nor too large (waste of memory).private static long
serialVersionUID
-
Constructor Summary
Constructors Modifier Constructor Description private
InternCache()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description java.lang.String
intern(java.lang.String input)
-
Methods inherited from class java.util.concurrent.ConcurrentHashMap
clear, compute, computeIfAbsent, computeIfPresent, contains, containsKey, containsValue, elements, entrySet, equals, forEach, forEach, forEach, forEachEntry, forEachEntry, forEachKey, forEachKey, forEachValue, forEachValue, get, getOrDefault, hashCode, isEmpty, keys, keySet, keySet, mappingCount, merge, newKeySet, newKeySet, put, putAll, putIfAbsent, reduce, reduceEntries, reduceEntries, reduceEntriesToDouble, reduceEntriesToInt, reduceEntriesToLong, reduceKeys, reduceKeys, reduceKeysToDouble, reduceKeysToInt, reduceKeysToLong, reduceToDouble, reduceToInt, reduceToLong, reduceValues, reduceValues, reduceValuesToDouble, reduceValuesToInt, reduceValuesToLong, remove, remove, replace, replace, replaceAll, search, searchEntries, searchKeys, searchValues, size, toString, values
-
-
-
-
Field Detail
-
serialVersionUID
private static final long serialVersionUID
- See Also:
- Constant Field Values
-
MAX_ENTRIES
private static final int MAX_ENTRIES
Size to use is somewhat arbitrary, so let's choose something that's neither too small (low hit ratio) nor too large (waste of memory).One consideration is possible attack via colliding
String.hashCode()
; because of this, limit to reasonably low setting.- See Also:
- Constant Field Values
-
instance
public static final InternCache instance
-
lock
private final java.lang.Object lock
As minor optimization let's try to avoid "flush storms", cases where multiple threads might try to concurrently flush the map.
-
-