Cache the objects frequently used to reduce memory churn. The ByteArray should be held onto as long as the data referenced in it is needed.
For small arrays where the management of valid bytes in ByteArray and prezeroing isn't required, use SimpleByteArray instead.
Heap size control - survey of usage:
+---------------------------------------------------------------------+ | Size | Max | MaxMem | From | +---------------------------------------------------------------------+ | 1K | 32 | 32K | tunnel TrivialPreprocessor | | 1K | 512 | 512K | tunnel FragmentHandler | | 1K | 512 | 512K | tunnel I2NP TunnelDataMessage | | 1K | 512 | 512K | tunnel FragmentedMessage | | 1572 | 64 | 100K | UDP InboundMessageState | | 1730 | 128 | 216K | streaming MessageOutputStream | | 4K | 32 | 28K | I2PTunnelRunner | | 8K | 8 | 64K | I2PTunnel HTTPResponseOutputStream | | 16K | 16 | 256K | I2PSnark | | 32K | 4 | 128K | SAM StreamSession | | 32K | 10 | 320K | SAM v2StreamSession | | 32K | 64 | 2M | UDP OMS | | 32K | 128 | 4M | streaming MessageInputStream | | 36K | 64 | 2.25M | streaming PacketQueue | | 40K | 8 | 320K | DataHelper decompress | | 64K | 64 | 4M | UDP MessageReceiver | +---------------------------------------------------------------------+
Nested Class Summary
Nested classes/interfaces inherited from class TryCache
TryCache.ObjectFactory<T>Modifier and TypeClassDescriptionstatic interfaceFactory interface for creating new objects in TryCache.Method Summary
Modifier and TypeMethodDescriptionstatic voidclearAll()Clear everything (memory pressure).static ByteCachegetInstance(int cacheSize, int size) Shared cache for the given entry size and capacity.final voidPut this structure back onto the available cache for reuse.final voidRelease the entry back to the cache, optionally zeroing its contents first.voidresize(int maxCachedEntries) Resize the cache to a new capacity.Methods inherited from class TryCache
acquire, clear, getAcquireCount, getCapacity, getDiscardCount, getLastUnderflowTime, getMissCount, getReleaseCount, shrink, size, wasUnderfilledModifier and TypeMethodDescriptionacquire()Acquire an object from the cache or create a new one.voidclear()Clear all cached items.longReturn total acquire() count (hits + misses).intReturn the current cache capacity.longReturn the number of release() calls that were discarded because the cache was full.longTimestamp of the last underflow.longReturn the number of acquire() calls that found an empty cache (misses required allocating a new object).longReturn total release() count (returned to cache).voidshrink(int targetSize) Shrink the cache to the target size, evicting excess items.intsize()Current number of cached items.booleanwasUnderfilled(long thresholdMillis) Check if the cache has been underfilled longer than the threshold.
Method Details
getInstance
Shared cache for the given entry size and capacity.- Parameters:
cacheSize- the number of entries to hold, trimmed as needed to stay under MAX_CACHEsize- the byte length of every cached entry, raised to at least 1 and used as the cache key- Returns:
- the shared cache for that entry size, creating it if needed
clearAll
public static void clearAll()Clear everything (memory pressure).resize
release
release
Release the entry back to the cache, optionally zeroing its contents first.- Parameters:
entry- the structure being handed back, ignored if null or the wrong sizeshouldZero- true to overwrite the entry's bytes with zeroes before pooling it