When a flush occurs on the TimedBuffer, I notice it allocates a native buffer of the size of the entire TimedBuffer:
bufferToFlush = bufferObserver.newBuffer(bufferSize, pos);
bufferToFlush = bufferObserver.newBuffer(pos, pos);
On AIO that will make the bufferalways being reused.
For Nio it would be better to allocate the way you said.
I should have added a comment about that.