Description
The Java broker uses excessive amounts of memory to service 0-10 connections. There are a number of reasons for this, such as:
- Use of an arbitrary 64000 element array in the Assembler to store incomplete incoming per-channel data.
- Use of per-connection ThreadLocals for the BBDecoder in the Assembler interacting with the thread pool threads moving between connections, leading to an NxM number of BBDecoders in use.
- Use of per-connection ThreadLocals for the BBEncoder in the Disassembler interacting with the thread pool threads moving between connections, leading to an NxM number of BBEncoders in use.
- BBDecoder maintaining a hard reference to the last ByteBuffer it used.
- The binary->String cache within BBDecoder maintaining a hard reference to the entire backing array for the network read buffer which contained the cached binary, rather than just the bit being cached.