net.i2p.util

## Class ByteCache

- java.lang.Object
- - net.i2p.util.ByteCache

-     public final class ByteCache
      extends Object

  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. Heap size control - survey of usage (April 2010) :

              Size    Max     MaxMem  From

              16      16      256     CryptixAESEngine
              16      32      512     BloomFilterIVValidator
              16      64      1K      UDP PacketBuilder
              16      128     2K      tunnel HopProcessor
              16      128     2K      tunnel TrivialPreprocessor
              16      128     2K      tunnel InboundEndpointProcessor
              16      128     2K      tunnel OutboundGatewayProcessor

              32      64      2K      UDP PacketBuilder
              32      128     4K      tunnel TrivialPreprocessor

              1K      32      32K     tunnel TrivialPreprocessor
              1K      512     512K    tunnel FragmentHandler
              1K      512     512K    I2NP TunnelDataMessage
              1K      512     512K    tunnel FragmentedMessage

              1730    128     216K    streaming MessageOutputStream

              2K      64      128K    UDP IMS

              4K      32      128K    I2PTunnelRunner

              8K      8       64K     I2PTunnel HTTPResponseOutputStream

              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 - disabled in 0.7.14

- - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `ByteArray` | `acquire()` Get the next available structure, either from the cache or a brand new one
    `static void` | `clearAll()` Clear everything (memory pressure)
    `static ByteCache` | `getInstance(int cacheSize, int size)` Get a cache responsible for objects of the given size
    `void` | `release(ByteArray entry)` Put this structure back onto the available cache for reuse
    `void` | `release(ByteArray entry, boolean shouldZero)`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Method Detail

    - #### getInstance

          public static ByteCache getInstance(int cacheSize,
                              int size)

      Get a cache responsible for objects of the given size
      Parameters:
        `cacheSize` - how large we want the cache to grow (number of objects, NOT memory size) before discarding released objects. Since 0.7.14, a limit of 1MB / size is enforced for the typical 128MB max memory JVM
        `size` - how large should the objects cached be?

    - #### clearAll

          public static void clearAll()

      Clear everything (memory pressure)
      Since:
        0.7.14

    - #### acquire

          public final ByteArray acquire()

      Get the next available structure, either from the cache or a brand new one

    - #### release

          public final void release(ByteArray entry)

      Put this structure back onto the available cache for reuse

    - #### release

          public final void release(ByteArray entry,
                     boolean shouldZero)