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 Detail

      • 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)