@Override protected boolean removeEldestEntry(Map.Entry<HashEntry<K, V>, V> eldest) { boolean aboveThreshold = isAboveThreshold(); if ( aboveThreshold ) { HashEntry<K, V> evictedEntry = eldest.getKey(); segment.evictionListener.onEntryChosenForEviction( evictedEntry.value ); segment.remove( evictedEntry.key, evictedEntry.hash, null ); evicted.add( evictedEntry ); } return aboveThreshold; }
private void notifyEvictionListener(Set<HashEntry<K, V>> evicted) { // piggyback listener invocation on callers thread outside lock if ( evicted != null ) { Map<K, V> evictedCopy; if ( evicted.size() == 1 ) { HashEntry<K, V> evictedEntry = evicted.iterator().next(); evictedCopy = singletonMap( evictedEntry.key, evictedEntry.value ); } else { evictedCopy = new HashMap<K, V>( evicted.size() ); for ( HashEntry<K, V> he : evicted ) { evictedCopy.put( he.key, he.value ); } evictedCopy = unmodifiableMap( evictedCopy ); } evictionListener.onEntryEviction( evictedCopy ); } } }
private void notifyEvictionListener(Set<HashEntry<K, V>> evicted) { // piggyback listener invocation on callers thread outside lock if ( evicted != null ) { Map<K, V> evictedCopy; if ( evicted.size() == 1 ) { HashEntry<K, V> evictedEntry = evicted.iterator().next(); evictedCopy = singletonMap( evictedEntry.key, evictedEntry.value ); } else { evictedCopy = new HashMap<K, V>( evicted.size() ); for ( HashEntry<K, V> he : evicted ) { evictedCopy.put( he.key, he.value ); } evictedCopy = unmodifiableMap( evictedCopy ); } evictionListener.onEntryEviction( evictedCopy ); } } }
private void removeFromSegment(Set<HashEntry<K, V>> evicted) { for ( HashEntry<K, V> e : evicted ) { ( (LIRSHashEntry<K, V>) e ).evict(); segment.evictionListener.onEntryChosenForEviction( e.value ); segment.remove( e.key, e.hash, null ); } }
@Override protected boolean removeEldestEntry(Map.Entry<HashEntry<K, V>, V> eldest) { boolean aboveThreshold = isAboveThreshold(); if ( aboveThreshold ) { HashEntry<K, V> evictedEntry = eldest.getKey(); segment.evictionListener.onEntryChosenForEviction( evictedEntry.value ); segment.remove( evictedEntry.key, evictedEntry.hash, null ); evicted.add( evictedEntry ); } return aboveThreshold; }
private void removeFromSegment(Set<HashEntry<K, V>> evicted) { for ( HashEntry<K, V> e : evicted ) { ( (LIRSHashEntry<K, V>) e ).evict(); segment.evictionListener.onEntryChosenForEviction( e.value ); segment.remove( e.key, e.hash, null ); } }