public final class DoubleBarrelLRUCache<K extends DoubleBarrelLRUCache.CloneableKey,V> extends Object
At any given time, one hash is primary and the other
is secondary. get(K)
first checks primary, and if
that's a miss, checks secondary. If secondary has the
entry, it's promoted to primary (NOTE: the key is
cloned at this point). Once primary is full, the
secondary is cleared and the two are swapped.
This is not as space efficient as other possible concurrent approaches (see LUCENE-2075): to achieve perfect LRU(N) it requires 2*N storage. But, this approach is relatively simple and seems in practice to not grow unbounded in size when under hideously high load.
Modifier and Type | Class and Description |
---|---|
static class |
DoubleBarrelLRUCache.CloneableKey
Object providing clone(); the key class must subclass this.
|
Constructor and Description |
---|
DoubleBarrelLRUCache(int maxSize) |