Сравнение производительности для хроники 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);  
    });
}

0 ответов

Другие вопросы по тегам