Class AdaptiveObjectCache
- All Implemented Interfaces:
Cache
Cache implementation backed by the common hard-reference memory-aware cache support.
The default constructors are intentionally count-bounded: every cached value counts as one entry, regardless of the size of its object graph. Use the weighted constructor only for values with a reliable size estimate, such as serialized payloads.
-
Field Summary
Fields -
Constructor Summary
ConstructorsConstructorDescriptionAdaptiveObjectCache(int maxSize) AdaptiveObjectCache(int maxSize, MemoryPressureController memoryPressureController) AdaptiveObjectCache(int maxSize, MemoryPressureController memoryPressureController, Duration expiry) Constructs a count-bounded cache with memory-pressure trimming and a maximum entry age.AdaptiveObjectCache(int maxSize, MemoryPressureController memoryPressureController, Duration expiry, Clock clock) AdaptiveObjectCache(int maxSize, Duration expiry) Constructs a count-bounded cache with a maximum entry age.AdaptiveObjectCache(long maxWeight, long maxEntryWeight, ToLongBiFunction<? super Object, ? super Object> weigher, MemoryPressureController memoryPressureController) AdaptiveObjectCache(long maxWeight, long maxEntryWeight, ToLongBiFunction<? super Object, ? super Object> weigher, MemoryPressureController memoryPressureController, Duration expiry) Constructs a weighted cache with memory-pressure trimming and a maximum entry age.AdaptiveObjectCache(long maxWeight, long maxEntryWeight, ToLongBiFunction<? super Object, ? super Object> weigher, MemoryPressureController memoryPressureController, Duration expiry, Clock clock) -
Method Summary
Modifier and TypeMethodDescriptionvoidclear()Removes all entries from the cache.voidclose()Closes the cache and releases all associated resources.<T> Tcompute(Object id, BiFunction<? super Object, ? super T, ? extends T> mappingFunction) Computes and stores a new value for the givenidusing the provided function.<T> TcomputeIfAbsent(Object id, Function<? super Object, T> mappingFunction) If a value is not already associated with the givenid, computes and stores one using the given function.<T> TcomputeIfPresent(Object id, BiFunction<? super Object, ? super T, ? extends T> mappingFunction) If a value is already associated with the givenid, computes a new value using the provided function and replaces the old one.booleancontainsKey(Object id) Checks whether the cache contains an entry for the givenid.<T> TRetrieves the value associated with the givenid, ornullif not found.<T> voidmergeAll(Map<?, ? extends T> values, BiFunction<? super T, ? super T, ? extends T> mergeFunction) Merges a bounded group of candidate values into this cache.<T> voidmodifyEach(BiFunction<? super Object, ? super T, ? extends T> modifierFunction) Applies the given modifier function to all values currently in the cache.Puts a value in the cache for the givenid, overwriting any existing value.putIfAbsent(Object id, Object value) Associates the specified value with the givenidonly if no value is currently associated.rebuild()Returns a fresh cache instance with the same configuration and no stored entries.registerEvictionListener(Consumer<CacheEviction> listener) Registers a listener to be notified whenever a cache entry is evicted or removed.<T> TRemoves the entry associated with the givenid, if present.intsize()Returns the number of entries currently stored in the cache.<U,T> void supplyAll(Iterable<? extends U> lookups, Function<? super U, ?> keyFunction, BiConsumer<? super U, ? super T> valueConsumer) Supplies every present value from an ordered group of lookups.boolean<U,T> void updateAll(Iterable<? extends U> updates, Function<? super U, ?> keyFunction, BiFunction<? super U, ? super T, ? extends T> updateFunction) Applies an ordered group of updates while deriving each cache key from the update value.<U,T> void updateAll(Iterable<? extends U> updates, Function<? super U, ?> lookupKeyFunction, Function<? super U, ?> retainedKeyFunction, BiFunction<? super U, ? super T, ? extends T> updateFunction) Applies an ordered group of updates using a possibly transient lookup key and a stable key for new entries.<T> voidApplies independent per-key update functions as one bounded cache operation.longweight()Methods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface Cache
getOrDefault, isEmpty
-
Field Details
-
DEFAULT_MAX_SIZE
public static final int DEFAULT_MAX_SIZE- See Also:
-
-
Constructor Details
-
AdaptiveObjectCache
public AdaptiveObjectCache() -
AdaptiveObjectCache
public AdaptiveObjectCache(int maxSize) -
AdaptiveObjectCache
Constructs a count-bounded cache with a maximum entry age. -
AdaptiveObjectCache
-
AdaptiveObjectCache
public AdaptiveObjectCache(int maxSize, MemoryPressureController memoryPressureController, Duration expiry) Constructs a count-bounded cache with memory-pressure trimming and a maximum entry age. -
AdaptiveObjectCache
public AdaptiveObjectCache(long maxWeight, long maxEntryWeight, ToLongBiFunction<? super Object, ? super Object> weigher, MemoryPressureController memoryPressureController) -
AdaptiveObjectCache
public AdaptiveObjectCache(long maxWeight, long maxEntryWeight, ToLongBiFunction<? super Object, ? super Object> weigher, MemoryPressureController memoryPressureController, Duration expiry) Constructs a weighted cache with memory-pressure trimming and a maximum entry age. -
AdaptiveObjectCache
public AdaptiveObjectCache(int maxSize, MemoryPressureController memoryPressureController, Duration expiry, Clock clock) -
AdaptiveObjectCache
public AdaptiveObjectCache(long maxWeight, long maxEntryWeight, ToLongBiFunction<? super Object, ? super Object> weigher, MemoryPressureController memoryPressureController, Duration expiry, Clock clock)
-
-
Method Details
-
put
Description copied from interface:CachePuts a value in the cache for the givenid, overwriting any existing value. -
putIfAbsent
Description copied from interface:CacheAssociates the specified value with the givenidonly if no value is currently associated.- Specified by:
putIfAbsentin interfaceCache- Parameters:
id- the key to check for presencevalue- the value to associate if absent- Returns:
- the existing value associated with the key, or
nullif the new value was successfully put
-
computeIfAbsent
Description copied from interface:CacheIf a value is not already associated with the givenid, computes and stores one using the given function.- Specified by:
computeIfAbsentin interfaceCache- Type Parameters:
T- the expected type of the value- Parameters:
id- the key to check or computemappingFunction- the function to compute a value if absent- Returns:
- the current or newly computed value
-
computeIfPresent
public <T> T computeIfPresent(Object id, BiFunction<? super Object, ? super T, ? extends T> mappingFunction) Description copied from interface:CacheIf a value is already associated with the givenid, computes a new value using the provided function and replaces the old one.- Specified by:
computeIfPresentin interfaceCache- Type Parameters:
T- the expected type of the value- Parameters:
id- the key to compute formappingFunction- the function to compute a new value from the current one- Returns:
- the newly computed value, or
nullif the mapping function returnednull
-
compute
Description copied from interface:CacheComputes and stores a new value for the givenidusing the provided function.The previous value (if any) is provided to the function. The result is stored in the cache.
-
mergeAll
public <T> void mergeAll(Map<?, ? extends T> values, BiFunction<? super T, ? super T, ? extends T> mergeFunction) Description copied from interface:CacheMerges a bounded group of candidate values into this cache.The default implementation preserves the ordinary per-key
Cache.compute(Object, BiFunction)contract. Implementations may override this method to reduce lock transitions while retaining the same per-key merge semantics. The group as a whole is not an atomic transaction. -
updateAll
Description copied from interface:CacheApplies independent per-key update functions as one bounded cache operation.The default implementation preserves the ordinary per-key
Cache.compute(Object, BiFunction)contract. Implementations may override this method to amortize shared bookkeeping or lock transitions. The group as a whole is not an atomic transaction. -
updateAll
public <U,T> void updateAll(Iterable<? extends U> updates, Function<? super U, ?> keyFunction, BiFunction<? super U, ? super T, ? extends T> updateFunction) Description copied from interface:CacheApplies an ordered group of updates while deriving each cache key from the update value.Unlike the map-shaped overload, this form permits repeated keys and applies them in iteration order. The default implementation preserves the ordinary per-key
Cache.compute(Object, BiFunction)contract; implementations may override it to amortize locking and pressure bookkeeping. -
updateAll
public <U,T> void updateAll(Iterable<? extends U> updates, Function<? super U, ?> lookupKeyFunction, Function<? super U, ?> retainedKeyFunction, BiFunction<? super U, ? super T, ? extends T> updateFunction) Description copied from interface:CacheApplies an ordered group of updates using a possibly transient lookup key and a stable key for new entries.The default implementation uses only
retainedKeyFunction, preserving the ordinary cache contract for custom implementations. Caches that can distinguish lookup from insertion may override this method to avoid allocating a stable key when an existing entry is merely replaced. A lookup key must compare equal to its retained counterpart for the duration of the lookup and must never be retained by an implementation.- Specified by:
updateAllin interfaceCache- Type Parameters:
U- update value typeT- cache value type- Parameters:
updates- ordered update valueslookupKeyFunction- derives a key that may be reused after each lookupretainedKeyFunction- derives the stable key to retain when an entry must be insertedupdateFunction- applies an update to the current cached value
-
modifyEach
Description copied from interface:CacheApplies the given modifier function to all values currently in the cache.This is useful for bulk modifications, e.g. adjusting internal state after a system-wide change.
- Specified by:
modifyEachin interfaceCache- Type Parameters:
T- the expected type of the values- Parameters:
modifierFunction- the function to apply to each entry
-
get
Description copied from interface:CacheRetrieves the value associated with the givenid, ornullif not found. -
supplyAll
public <U,T> void supplyAll(Iterable<? extends U> lookups, Function<? super U, ?> keyFunction, BiConsumer<? super U, ? super T> valueConsumer) Description copied from interface:CacheSupplies every present value from an ordered group of lookups.The default implementation preserves the ordinary per-key
Cache.get(Object)contract. Implementations may override this method to amortize shared bookkeeping or lock transitions, but must retain the same per-key access and eviction semantics in iteration order. -
containsKey
Description copied from interface:CacheChecks whether the cache contains an entry for the givenid.- Specified by:
containsKeyin interfaceCache- Parameters:
id- the key to check- Returns:
trueif the key exists in the cache,falseotherwise
-
remove
Description copied from interface:CacheRemoves the entry associated with the givenid, if present. -
clear
-
size
-
registerEvictionListener
Description copied from interface:CacheRegisters a listener to be notified whenever a cache entry is evicted or removed.- Specified by:
registerEvictionListenerin interfaceCache- Parameters:
listener- a function that consumesCacheEvictions- Returns:
- a registration that can be used to cancel the listener
-
rebuild
-
close
-
weight
public long weight() -
trimForMemoryPressure
public boolean trimForMemoryPressure()
-