/** * Updates eviction metadata that {@code entry} was just written. This currently amounts to * adding {@code entry} to relevant eviction lists. */ @GuardedBy("this") void recordWrite(ReferenceEntry<K, V> entry) { // we are already under lock, so drain the recency queue immediately drainRecencyQueue(); evictionQueue.add(entry); if (map.expires()) { // currently MapMaker ensures that expireAfterWrite and // expireAfterAccess are mutually exclusive long expiration = map.expiresAfterAccess() ? map.expireAfterAccessNanos : map.expireAfterWriteNanos; recordExpirationTime(entry, expiration); expirationQueue.add(entry); } }
ReferenceEntry<K, V> getLiveEntry(Object key, int hash) { ReferenceEntry<K, V> e = getEntry(key, hash); if (e == null) { return null; } else if (map.expires() && map.isExpired(e)) { tryExpireEntries(); return null; } return e; }
ReferenceEntry<K, V> getLiveEntry(Object key, int hash) { ReferenceEntry<K, V> e = getEntry(key, hash); if (e == null) { return null; } else if (map.expires() && map.isExpired(e)) { tryExpireEntries(); return null; } return e; }
Segment(MapMakerInternalMap<K, V> map, int initialCapacity, int maxSegmentSize) { this.map = map; this.maxSegmentSize = maxSegmentSize; initTable(newEntryArray(initialCapacity)); keyReferenceQueue = map.usesKeyReferences() ? new ReferenceQueue<K>() : null; valueReferenceQueue = map.usesValueReferences() ? new ReferenceQueue<V>() : null; recencyQueue = (map.evictsBySize() || map.expiresAfterAccess()) ? new ConcurrentLinkedQueue<ReferenceEntry<K, V>>() : MapMakerInternalMap.<ReferenceEntry<K, V>> discardingQueue(); evictionQueue = map.evictsBySize() ? new EvictionQueue<K, V>() : MapMakerInternalMap.<ReferenceEntry<K, V>> discardingQueue(); expirationQueue = map.expires() ? new ExpirationQueue<K, V>() : MapMakerInternalMap.<ReferenceEntry<K, V>> discardingQueue(); }
ReferenceEntry<K, V> getLiveEntry(Object key, int hash) { ReferenceEntry<K, V> e = getEntry(key, hash); if (e == null) { return null; } else if (map.expires() && map.isExpired(e)) { tryExpireEntries(); return null; } return e; }
Segment(MapMakerInternalMap<K, V> map, int initialCapacity, int maxSegmentSize) { this.map = map; this.maxSegmentSize = maxSegmentSize; initTable(newEntryArray(initialCapacity)); keyReferenceQueue = map.usesKeyReferences() ? new ReferenceQueue<K>() : null; valueReferenceQueue = map.usesValueReferences() ? new ReferenceQueue<V>() : null; recencyQueue = (map.evictsBySize() || map.expiresAfterAccess()) ? new ConcurrentLinkedQueue<ReferenceEntry<K, V>>() : MapMakerInternalMap.<ReferenceEntry<K, V>>discardingQueue(); evictionQueue = map.evictsBySize() ? new EvictionQueue<K, V>() : MapMakerInternalMap.<ReferenceEntry<K, V>>discardingQueue(); expirationQueue = map.expires() ? new ExpirationQueue<K, V>() : MapMakerInternalMap.<ReferenceEntry<K, V>>discardingQueue(); }
ReferenceEntry<K, V> getLiveEntry(Object key, int hash) { ReferenceEntry<K, V> e = getEntry(key, hash); if (e == null) { return null; } else if (map.expires() && map.isExpired(e)) { tryExpireEntries(); return null; } return e; }
ReferenceEntry<K, V> getLiveEntry(Object key, int hash) { ReferenceEntry<K, V> e = getEntry(key, hash); if (e == null) { return null; } else if (map.expires() && map.isExpired(e)) { tryExpireEntries(); return null; } return e; }
ReferenceEntry<K, V> getLiveEntry(Object key, int hash) { ReferenceEntry<K, V> e = getEntry(key, hash); if (e == null) { return null; } else if (map.expires() && map.isExpired(e)) { tryExpireEntries(); return null; } return e; }
ReferenceEntry<K, V> getLiveEntry(Object key, int hash) { ReferenceEntry<K, V> e = getEntry(key, hash); if (e == null) { return null; } else if (map.expires() && map.isExpired(e)) { tryExpireEntries(); return null; } return e; }
ReferenceEntry<K, V> getLiveEntry(Object key, int hash) { ReferenceEntry<K, V> e = getEntry(key, hash); if (e == null) { return null; } else if (map.expires() && map.isExpired(e)) { tryExpireEntries(); return null; } return e; }
ReferenceEntry<K, V> getLiveEntry(Object key, int hash) { ReferenceEntry<K, V> e = getEntry(key, hash); if (e == null) { return null; } else if (map.expires() && map.isExpired(e)) { tryExpireEntries(); return null; } return e; }
HashIterator() { nextSegmentIndex = segments.length - 1; nextTableIndex = -1; advance(); }
HashIterator() { nextSegmentIndex = segments.length - 1; nextTableIndex = -1; advance(); }
HashIterator() { nextSegmentIndex = segments.length - 1; nextTableIndex = -1; advance(); }
HashIterator() { nextSegmentIndex = segments.length - 1; nextTableIndex = -1; advance(); }
HashIterator() { nextSegmentIndex = segments.length - 1; nextTableIndex = -1; advance(); }
HashIterator() { nextSegmentIndex = segments.length - 1; nextTableIndex = -1; advance(); }
HashIterator() { nextSegmentIndex = segments.length - 1; nextTableIndex = -1; advance(); }
HashIterator() { nextSegmentIndex = segments.length - 1; nextTableIndex = -1; advance(); }