Package net.i2p.util

Class ByteCache


public final class ByteCache
extends 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
changed to 512 since we disabled resize()
        1K      512     512K    tunnel FragmentHandler
        1K      512     512K    I2NP TunnelDataMessage
        1K      512     512K    tunnel FragmentedMessage

        1572    64      100K    UDP InboundMessageState

        1730    128     216K    streaming MessageOutputStream

        4K      32      128K    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 - disabled in 0.7.14
  
  • Method Details

    • getInstance

      public static ByteCache getInstance​(int cacheSize, int size)
      Get a cache responsible for objects of the given size. Warning, if you store the result in a static field, the cleaners will not operate after a restart on Android, as the old context's SimpleTimer2 will have shut down. TODO tie this to the context or clean up all calls.
      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
    • release

      public final void release​(ByteArray entry)
      Put this structure back onto the available cache for reuse
      Overrides:
      release in class TryCache<ByteArray>
    • release

      public final void release​(ByteArray entry, boolean shouldZero)