I am working on task involving reading from the socket trading quotes and I need to achieve minimum latency and high throughput.
I started with the simpliest possible java nio prototype like this
ByteBuffer buf = ByteBuffer.allocateDirect(BUFFER_SIZE);
try {
buf.clear();
int numBytesRead = socketChannel.read(buf);
if (numBytesRead == -1) {
socketChannel.close();
} else {
buf.flip();
byte[] byteArrived = new byte[buf.remaining];
buf.get(byteArrived,0,byteArrived.length);
// here we send byteArrived to the parser
}
} catch (IOException e) {
}
I guess it is lame to create byte[] array every time, but due to the lack of knowledge I dont know how to parse ByteBuffer ( because I need to unmarshall byte protocol into messages and pass them into business logic). Can you recommend how to avoid mass garbage creation?
Also I would like to ask about best practices how to organize socket reading with low latency and high throughput? I read about LMAX and disruptor framework and they achieved 6M transactions on the single thread.