Currently for each remote connection we make an SSLIOSession.
Each SSLIOSession has 4 buffers:
private final SSLBuffer inEncrypted;
private final SSLBuffer outEncrypted;
private final SSLBuffer inPlain;
private final SSLBuffer outPlain;
And each of these buffers occupies 16K (64K per remote connection).
Our application uses NIO for long polling and we have 9000 idle long polling connections waiting for notifications.
This makes 9000 * 64K = 576 000K (576MB).
I checked the code and saw that the outPlain buffer is not used.
I tested the code without it and everything worked fine.
If we remove this buffer it will save 25% of the memory from the buffers used for the remote connections. In our case this is 144MB.
Here is a proposed patch for SSLIOSession.java that removes the unused buffer.