public final class ByteCacheextends TryCache<ByteArray>
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                |
+---------------------------------------------------------------------+
  • Method Details

    • getInstance

      public static ByteCache getInstance(int cacheSize, int size)
      Shared cache for the given entry size and capacity.
      Parameters:
      cacheSize - the number of entries to hold, trimmed as needed to stay under MAX_CACHE
      size - 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

      public void resize(int maxCachedEntries)
      Resize the cache to a new capacity.
      Overrides:
      resize in class TryCache<ByteArray>
      Parameters:
      maxCachedEntries - the new maximum number of entries to cache
    • release

      public final void release(ByteArray entry)
      Put this structure back onto the available cache for reuse.
      Overrides:
      release in class TryCache<ByteArray>
      Parameters:
      entry - the value to hand back to the cache for reuse
    • release

      public final void release(ByteArray entry, boolean shouldZero)
      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 size
      shouldZero - true to overwrite the entry's bytes with zeroes before pooling it