ConcurrentMap instances that can have keys or values automatically wrapped
in weak references.
Usage example:
ConcurrentMap<Request, Stopwatch> timers = new MapMaker()
.concurrencyLevel(4)
.weakKeys()
.makeMap();
These features are all optional; new MapMaker().makeMap() returns a valid concurrent
map that behaves similarly to a ConcurrentHashMap.
The returned map is implemented as a hash table with similar performance characteristics to
ConcurrentHashMap. It supports all optional operations of the ConcurrentMap
interface. It does not permit null keys or values.
Note
by default, the returned map uses equality comparisons (the equals method) to determine equality for keys or values. However, if weakKeys was
specified, the map uses identity (==) comparisons instead for keys. Likewise, if weakValues was specified, the map uses identity comparisons for values.
The view collections of the returned map have weakly consistent iterators. This means
that they are safe for concurrent use, but if other threads modify the map after the iterator is
created, it is undefined which of these changes, if any, are reflected in that iterator. These
iterators never throw ConcurrentModificationException.
If weakKeys or weakValues are requested, it is possible for a key or value
present in the map to be reclaimed by the garbage collector. Entries with reclaimed keys or
values may be removed from the map on each map modification or on occasional map accesses; such
entries may be counted by Map#size, but will never be visible to read or write
operations. A partially-reclaimed entry is never exposed to the user. Any Map.
instance retrieved from the map's entry set is a snapshot of that
entry's state at the time of retrieval; such entries do, however, support Map., which simply calls Map#put on the entry's key.
The maps produced by MapMaker are serializable, and the deserialized maps retain all
the configuration properties of the original map. During deserialization, if the original map had
used weak references, the entries are reconstructed as they were, but it's not unlikely they'll
be quickly garbage-collected before they are ever accessed.
new MapMaker().weakKeys().makeMap() is a recommended replacement for java., but note that it compares keys using object identity whereas WeakHashMap uses Object#equals.
| Modifier and Type | Class and Description |
|---|---|
| pack-priv static enum | MapMaker.Dummy
A dummy singleton value type used by |
| Modifier and Type | Field and Description |
|---|---|
| pack-priv int | |
| private static final int | |
| private static final int | |
| pack-priv int | |
| pack-priv Equivalence | |
| pack-priv MapMakerInternalMap. | |
| pack-priv static final int | |
| pack-priv boolean | |
| pack-priv MapMakerInternalMap. |
| Access | Constructor and Description |
|---|---|
| public | MapMaker()
Constructs a new |
| Modifier and Type | Method and Description |
|---|---|
| public MapMaker | |
| pack-priv int | |
| pack-priv int | |
| pack-priv Equivalence | |
| pack-priv MapMakerInternalMap. | |
| pack-priv MapMakerInternalMap. | |
| public MapMaker | |
| pack-priv MapMaker | keyEquivalence(Equivalence<Object> equivalence)
Sets a custom |
| public <K, V> ConcurrentMap | Returns: a serializable concurrent map having the requested featuresBuilds a thread-safe map. |
| pack-priv MapMaker | |
| pack-priv MapMaker | |
| public String | toString()
Overrides java. |
| public MapMaker | weakKeys()
Specifies that each key (not value) stored in the map should be wrapped in a |
| public MapMaker | weakValues()
Specifies that each value (not key) stored in the map should be wrapped in a |
| concurrencyLevel | back to summary |
|---|---|
| pack-priv int concurrencyLevel | |
| DEFAULT_CONCURRENCY_LEVEL | back to summary |
|---|---|
| private static final int DEFAULT_CONCURRENCY_LEVEL | |
| DEFAULT_INITIAL_CAPACITY | back to summary |
|---|---|
| private static final int DEFAULT_INITIAL_CAPACITY | |
| initialCapacity | back to summary |
|---|---|
| pack-priv int initialCapacity | |
| keyEquivalence | back to summary |
|---|---|
| pack-priv Equivalence<Object> keyEquivalence
| |
| keyStrength | back to summary |
|---|---|
| pack-priv MapMakerInternalMap. | |
| UNSET_INT | back to summary |
|---|---|
| pack-priv static final int UNSET_INT | |
| useCustomMap | back to summary |
|---|---|
| pack-priv boolean useCustomMap | |
| valueStrength | back to summary |
|---|---|
| pack-priv MapMakerInternalMap. | |
| MapMaker | back to summary |
|---|---|
| public MapMaker() Constructs a new | |
| concurrencyLevel | back to summary |
|---|---|
| public MapMaker concurrencyLevel(int concurrencyLevel) Guides the allowed concurrency among update operations. Used as a hint for internal sizing. The table is internally partitioned to try to permit the indicated number of concurrent updates without contention. Because assignment of entries to these partitions is not necessarily uniform, the actual concurrency observed may vary. Ideally, you should choose a value to accommodate as many threads as will ever concurrently modify the table. Using a significantly higher value than you need can waste space and time, and a significantly lower value can lead to thread contention. But overestimates and underestimates within an order of magnitude do not usually have much noticeable impact. A value of one permits only one thread to modify the map at a time, but since read operations can proceed concurrently, this still yields higher concurrency than full synchronization. Defaults to 4. Note Prior to Guava release 9.0, the default was 16. It is possible the default will change again in the future. If you care about this value, you should always choose it explicitly.
| |
| getConcurrencyLevel | back to summary |
|---|---|
| pack-priv int getConcurrencyLevel() | |
| getInitialCapacity | back to summary |
|---|---|
| pack-priv int getInitialCapacity() | |
| getKeyEquivalence | back to summary |
|---|---|
| pack-priv Equivalence | |
| getKeyStrength | back to summary |
|---|---|
| pack-priv MapMakerInternalMap. | |
| getValueStrength | back to summary |
|---|---|
| pack-priv MapMakerInternalMap. | |
| initialCapacity | back to summary |
|---|---|
| public MapMaker initialCapacity(int initialCapacity) Sets the minimum total size for the internal hash tables. For example, if the initial capacity
is
| |
| keyEquivalence | back to summary |
|---|---|
| pack-priv MapMaker keyEquivalence(Equivalence<Object> equivalence) Sets a custom By default, the map uses
| |
| makeMap | back to summary |
|---|---|
| public <K, V> ConcurrentMap Builds a thread-safe map. This method does not alter the state of this The bulk operations
| |
| setKeyStrength | back to summary |
|---|---|
| pack-priv MapMaker setKeyStrength(MapMakerInternalMap. | |
| setValueStrength | back to summary |
|---|---|
| pack-priv MapMaker setValueStrength(MapMakerInternalMap. | |
| toString | back to summary |
|---|---|
| public String toString() Overrides java. Returns a string representation for this MapMaker instance. The exact form of the returned string is not specified.
| |
| weakKeys | back to summary |
|---|---|
| public MapMaker weakKeys() Specifies that each key (not value) stored in the map should be wrapped in a Warning when this method is used, the resulting map will use identity (
| |
| weakValues | back to summary |
|---|---|
| public MapMaker weakValues() Specifies that each value (not key) stored in the map should be wrapped in a Weak values will be garbage collected once they are weakly reachable. This makes them a poor candidate for caching. Warning when this method is used, the resulting map will use identity (
| |
Interners.
MapMakerInternalMap can optimize for memory usage in this case; see MapMakerInternalMap#createWithDummyValues.
| Access | Constructor and Description |
|---|---|
| private |
| Modifier and Type | Method and Description |
|---|---|
| public static MapMaker. | |
| public static MapMaker. |
| VALUE | back to summary |
|---|---|
| public static final MapMaker. | |
| Dummy | back to summary |
|---|---|
| private Dummy() | |
| valueOf | back to summary |
|---|---|
| public static MapMaker. | |
| values | back to summary |
|---|---|
| public static MapMaker. | |