/** * Create a {@link Map} to be used for the primary managed object cache. * Maps oids to state managers. By default, this creates a * {@link ReferenceMap} with soft values. */ protected Map<?,?> newManagedObjectCache() { return new ReferenceHashMap(ReferenceMap.HARD, ReferenceMap.SOFT); }
/** * Remove any entries over max size. */ private void removeOverflow(int maxSize) { Object key; while (size() > maxSize) { key = keySet().iterator().next(); overflowRemoved(key, remove(key)); } }
public void removeExpired() { purge(); }
protected void purge(Reference ref) { // the logic for this method is taken from the original purge method // we're overriding, with added logic to track the expired key/value int index = hashIndex(ref.hashCode(), data.length); AccessibleEntry entry = (AccessibleEntry) data[index]; AccessibleEntry prev = null; Object key = null, value = null; while (entry != null) { if (purge(entry, ref)) { if (isHard(keyType)) key = entry.key(); else if (isHard(valueType)) value = entry.value(); if (prev == null) data[index] = entry.nextEntry(); else prev.setNextEntry(entry.nextEntry()); size--; break; } prev = entry; entry = entry.nextEntry(); } if (key != null) valueExpired(key); else if (value != null) keyExpired(value); }
public void setMaxSize(int maxSize) { _maxSize = (maxSize < 0) ? Integer.MAX_VALUE : maxSize; if (_maxSize != Integer.MAX_VALUE) removeOverflow(_maxSize); }
public boolean isFull() { return size() >= _maxSize; }
/** * See the code for <code>ReferenceMap.ReferenceEntry.purge</code>. */ private boolean purge(AccessibleEntry entry, Reference ref) { boolean match = (!isHard(keyType) && entry.key() == ref) || (!isHard(valueType) && entry.value() == ref); if (match) { if (!isHard(keyType)) ((Reference) entry.key()).clear(); if (!isHard(valueType)) ((Reference) entry.value()).clear(); else if (purgeValues) entry.nullValue(); } return match; }
protected void purge(Reference ref) { // the logic for this method is taken from the original purge method // we're overriding, with added logic to track the expired key/value int index = hashIndex(ref.hashCode(), data.length); AccessibleEntry entry = (AccessibleEntry) data[index]; AccessibleEntry prev = null; Object key = null, value = null; while (entry != null) { if (purge(entry, ref)) { if (isHard(keyType)) key = entry.key(); else if (isHard(valueType)) value = entry.value(); if (prev == null) data[index] = entry.nextEntry(); else prev.setNextEntry(entry.nextEntry()); size--; break; } prev = entry; entry = entry.nextEntry(); } if (key != null) valueExpired(key); else if (value != null) keyExpired(value); }
public void setMaxSize(int maxSize) { _maxSize = (maxSize < 0) ? Integer.MAX_VALUE : maxSize; if (_maxSize != Integer.MAX_VALUE) removeOverflow(_maxSize); }
public boolean isFull() { return size() >= _maxSize; }
/** * See the code for <code>ReferenceMap.ReferenceEntry.purge</code>. */ private boolean purge(AccessibleEntry entry, Reference ref) { boolean match = (!isHard(keyType) && entry.key() == ref) || (!isHard(valueType) && entry.value() == ref); if (match) { if (!isHard(keyType)) ((Reference) entry.key()).clear(); if (!isHard(valueType)) ((Reference) entry.value()).clear(); else if (purgeValues) entry.nullValue(); } return match; }
protected void purge(Reference ref) { // the logic for this method is taken from the original purge method // we're overriding, with added logic to track the expired key/value int index = hashIndex(ref.hashCode(), data.length); AccessibleEntry entry = (AccessibleEntry) data[index]; AccessibleEntry prev = null; Object key = null, value = null; while (entry != null) { if (purge(entry, ref)) { if (isHard(keyType)) key = entry.key(); else if (isHard(valueType)) value = entry.value(); if (prev == null) data[index] = entry.nextEntry(); else prev.setNextEntry(entry.nextEntry()); size--; break; } prev = entry; entry = entry.nextEntry(); } if (key != null) valueExpired(key); else if (value != null) keyExpired(value); }
/** * Remove any entries over max size. */ private void removeOverflow(int maxSize) { Object key; while (size() > maxSize) { key = keySet().iterator().next(); overflowRemoved(key, remove(key)); } }
public void setMaxSize(int maxSize) { _maxSize = (maxSize < 0) ? Integer.MAX_VALUE : maxSize; if (_maxSize != Integer.MAX_VALUE) removeOverflow(_maxSize); }
/** * Create a {@link Map} to be used for the primary managed object cache. * Maps oids to state managers. By default, this creates a * {@link ReferenceMap} with soft values. */ protected Map newManagedObjectCache() { return new ReferenceHashMap(ReferenceMap.HARD, ReferenceMap.SOFT); }
public boolean isFull() { return size() >= _maxSize; }
public void removeExpired() { purge(); }
/** * See the code for <code>ReferenceMap.ReferenceEntry.purge</code>. */ private boolean purge(AccessibleEntry entry, Reference ref) { boolean match = (!isHard(keyType) && entry.key() == ref) || (!isHard(valueType) && entry.value() == ref); if (match) { if (!isHard(keyType)) ((Reference) entry.key()).clear(); if (!isHard(valueType)) ((Reference) entry.value()).clear(); else if (purgeValues) entry.nullValue(); } return match; }
protected void purge(Reference ref) { // the logic for this method is taken from the original purge method // we're overriding, with added logic to track the expired key/value int index = hashIndex(ref.hashCode(), data.length); AccessibleEntry entry = (AccessibleEntry) data[index]; AccessibleEntry prev = null; Object key = null, value = null; while (entry != null) { if (purge(entry, ref)) { if (isHard(keyType)) key = entry.key(); else if (isHard(valueType)) value = entry.value(); if (prev == null) data[index] = entry.nextEntry(); else prev.setNextEntry(entry.nextEntry()); size--; break; } prev = entry; entry = entry.nextEntry(); } if (key != null) valueExpired(key); else if (value != null) keyExpired(value); }
/** * Remove any entries over max size. */ private void removeOverflow(int maxSize) { Object key; while (size() > maxSize) { key = keySet().iterator().next(); overflowRemoved(key, remove(key)); } }