Как эффективно читать из сокета с помощью Java NIO

Я работаю над задачей, связанной с чтением из котировок сокетов, и мне нужно добиться минимальной задержки и высокой пропускной способности.

Я начал с самого простого возможного прототипа Java Java, как это

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) {    
}

Я полагаю, что создавать массив byte [] не каждый раз, но из-за недостатка знаний я не знаю, как анализировать ByteBuffer (потому что мне нужно разобрать протокол байтов в сообщениях и передать их в бизнес-логику). Можете ли вы порекомендовать, как избежать массового создания мусора?

Также я хотел бы спросить о передовых практиках, как организовать чтение сокетов с низкой задержкой и высокой пропускной способностью? Я читал о LMAX и фреймворке разрушителя, и они достигли 6 миллионов транзакций в одном потоке.

Ответы на вопрос(2)

Ваш ответ на вопрос