Class LruEvictionStrategy<K>

java.lang.Object
com.loomcache.server.datastructures.LruEvictionStrategy<K>
Type Parameters:
K - the type of keys being tracked
All Implemented Interfaces:
EvictionStrategy<K>

public final class LruEvictionStrategy<K> extends Object implements EvictionStrategy<K>
LRU (Least Recently Used) eviction strategy using LinkedHashMap.

LinkedHashMap with accessOrder=true maintains insertion/access order automatically. This is the most efficient way to track recency for LRU eviction, avoiding the overhead of a separate tracking deque.

Thread-safe with ReentrantLock for virtual thread compatibility (avoids carrier thread pinning that synchronized blocks can cause on pre-JEP 491 runtimes).

  • Constructor Details

    • LruEvictionStrategy

      public LruEvictionStrategy()
  • Method Details

    • onAccess

      public void onAccess(K key)
      Description copied from interface: EvictionStrategy
      Called when an existing key is accessed (e.g., via get() or containsKey()). Updates tracking information to reflect the access.
      Specified by:
      onAccess in interface EvictionStrategy<K>
    • onInsert

      public void onInsert(K key)
      Description copied from interface: EvictionStrategy
      Called when a new or updated key is inserted. Initializes or resets tracking information for that key.
      Specified by:
      onInsert in interface EvictionStrategy<K>
    • onRemove

      public void onRemove(K key)
      Description copied from interface: EvictionStrategy
      Called when a key is removed from the map. Cleans up any tracking information associated with the key.
      Specified by:
      onRemove in interface EvictionStrategy<K>
    • selectVictim

      public @Nullable K selectVictim()
      Description copied from interface: EvictionStrategy
      Selects a key to evict based on the eviction strategy. Returns null if no suitable victim can be found (e.g., empty map).
      Specified by:
      selectVictim in interface EvictionStrategy<K>
    • isEmpty

      public boolean isEmpty()
      Returns true if the eviction strategy is tracking no keys.
      Specified by:
      isEmpty in interface EvictionStrategy<K>
    • size

      public int size()
      Description copied from interface: EvictionStrategy
      Returns the number of distinct keys currently tracked. Used for statistics and diagnostics.
      Specified by:
      size in interface EvictionStrategy<K>
    • snapshotState

      public EvictionStrategy.EvictionState<K> snapshotState()
      Description copied from interface: EvictionStrategy
      Capture strategy-specific eviction metadata in deterministic victim order.
      Specified by:
      snapshotState in interface EvictionStrategy<K>
    • restoreState

      public void restoreState(EvictionStrategy.EvictionState<K> state)
      Description copied from interface: EvictionStrategy
      Replace strategy-specific eviction metadata from a snapshot.
      Specified by:
      restoreState in interface EvictionStrategy<K>