public class DecayingHashSet extends DecayingBloomFilter
Extends DecayingBloomFilter to provide dual-buffered hash sets with automatic decay switching between active and previous buffers. Optimized for high-throughput scenarios with frequent insertions and periodic cleanup operations.
Memory usage analysis shows significant optimization potential:
Performance characteristics:
Uses read/write locks with SimpleTimer2 for thread safety and efficient buffer switching without synchronization overhead.
_context, _currentDuplicates, _decayEvent, _durationMs, _entryBytes, _keepDecaying, _log, _name, _reorganizeLock| Constructor and Description |
|---|
DecayingHashSet(I2PAppContext context,
int durationMs,
int entryBytes)
Create a double-buffered hash set that will decay its entries over time.
|
DecayingHashSet(I2PAppContext context,
int durationMs,
int entryBytes,
String name) |
| Modifier and Type | Method and Description |
|---|---|
boolean |
add(byte[] entry,
int off,
int len) |
boolean |
add(long entry) |
void |
clear() |
protected void |
decay() |
double |
getFalsePositiveRate()
pointless, only used for logging elsewhere
|
int |
getInsertedCount()
unsynchronized but only used for logging elsewhere
|
boolean |
isKnown(long entry) |
void |
stopDecaying()
super doesn't call clear, but neither do the users, so it seems like we should here
|
add, getCurrentDuplicateCount, getReadLock, getWriteLock, releaseReadLock, releaseWriteLockpublic DecayingHashSet(I2PAppContext context, int durationMs, int entryBytes)
durationMs - entries last for at least this long, but no more than twice this longentryBytes - how large are the entries to be added? 1 to 32 bytespublic DecayingHashSet(I2PAppContext context, int durationMs, int entryBytes, String name)
name - just for logging / debugging / statspublic boolean add(byte[] entry,
int off,
int len)
add in class DecayingBloomFilterpublic boolean add(long entry)
add in class DecayingBloomFilterpublic void clear()
clear in class DecayingBloomFilterprotected void decay()
decay in class DecayingBloomFilterpublic double getFalsePositiveRate()
getFalsePositiveRate in class DecayingBloomFilterpublic int getInsertedCount()
getInsertedCount in class DecayingBloomFilterpublic boolean isKnown(long entry)
isKnown in class DecayingBloomFilterpublic void stopDecaying()
stopDecaying in class DecayingBloomFilter