Сравнение производительности для хроники 3.2.5 и 4.6.61 с использованием JMH
Я провел базовое тестирование JMH с использованием фиктивных данных в последней версии хроники (4.6.61) и обнаружил, что производительность снижается по сравнению с предыдущей версией 3.2.5. Может ли HFT прокомментировать полученные данные?
Пример кода 3.2.5
@Benchmark
public void testWriteMessageToChronicle(State state) {
try {
Handler.writeMessageToChronicle(state.receivedTimestamp, state.userDataSize, state.payloadSize, state.messageStreamId,
state.chronicle, state.headerBuffer, state.payloadBuffer);
} catch (IOException e) {
e.printStackTrace();
}
public static void writeMessageToChronicle(long receivedTimestamp, int userDataSize, int payloadSize, long messageStreamId,
VanillaChronicle chronicle, ByteBuffer headerBuffer, ByteBuffer payloadBuffer) throws IOException {
headerBuffer.clear();
headerBuffer.flip();
payloadBuffer.clear();
payloadBuffer.flip();
final ExcerptAppender appender = chronicle.createAppender();
appender.startExcerpt();
appender.writeLong(receivedTimestamp);
appender.writeLong(messageStreamId);
appender.writeInt(userDataSize);
appender.write(headerBuffer);
appender.writeInt(payloadSize);
appender.write(payloadBuffer);
appender.finish();
}
Пример кода для 4.6.61
@Benchmark
public void testWriteMessageToChronicle(State state) {
try {
Handler.writeMessageToChronicle(state.receivedTimestamp, state.userDataSize, state.payloadSize, state.messageStreamId,
state.chronicle, state.headerBuffer, state.payloadBuffer);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void writeMessageToChronicle(long receivedTimestamp, int userDataSize, int payloadSize, long messageStreamId,
SingleChronicleQueue chronicle, ByteBuffer headerBuffer, ByteBuffer payloadBuffer) throws IOException {
headerBuffer.clear();
headerBuffer.flip();
payloadBuffer.clear();
payloadBuffer.flip();
ExcerptAppender appender = chronicle.acquireAppender();
appender.writeBytes(b -> {
b.writeLong(receivedTimestamp);
b.writeLong(messageStreamId);
b.writeInt(userDataSize);
b.write(headerBuffer.array(), 0, userDataSize);
b.writeInt(payloadSize);
b.write(payloadBuffer.array(), 0, payloadSize);
});
}