From 9eb09b03dbaaa0e3f544b0602df3107096cd8501 Mon Sep 17 00:00:00 2001 From: gobeomjun Date: Wed, 12 Nov 2025 22:01:58 +0900 Subject: [PATCH] Optimize ArrayList allocations in BatchMessagingMessageConverter Pre-size all ArrayList instances with batch size to eliminate internal array resizing and reduce GC pressure in high-throughput batch processing scenarios. Fixes GH-4152 Signed-off-by: gobeomjun --- .../BatchMessagingMessageConverter.java | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/spring-kafka/src/main/java/org/springframework/kafka/support/converter/BatchMessagingMessageConverter.java b/spring-kafka/src/main/java/org/springframework/kafka/support/converter/BatchMessagingMessageConverter.java index ec37d82075..7b29b566c6 100644 --- a/spring-kafka/src/main/java/org/springframework/kafka/support/converter/BatchMessagingMessageConverter.java +++ b/spring-kafka/src/main/java/org/springframework/kafka/support/converter/BatchMessagingMessageConverter.java @@ -175,17 +175,18 @@ public Message toMessage(List> records, @Nullable Acknow new KafkaMessageHeaders(this.generateMessageId, this.generateTimestamp); Map rawHeaders = kafkaMessageHeaders.getRawHeaders(); - List payloads = new ArrayList<>(); - List keys = new ArrayList<>(); - List topics = new ArrayList<>(); - List partitions = new ArrayList<>(); - List offsets = new ArrayList<>(); - List timestampTypes = new ArrayList<>(); - List timestamps = new ArrayList<>(); - List> convertedHeaders = new ArrayList<>(); - List natives = new ArrayList<>(); - List> raws = new ArrayList<>(); - List conversionFailures = new ArrayList<>(); + int batchSize = records.size(); + List payloads = new ArrayList<>(batchSize); + List keys = new ArrayList<>(batchSize); + List topics = new ArrayList<>(batchSize); + List partitions = new ArrayList<>(batchSize); + List offsets = new ArrayList<>(batchSize); + List timestampTypes = new ArrayList<>(batchSize); + List timestamps = new ArrayList<>(batchSize); + List> convertedHeaders = new ArrayList<>(batchSize); + List natives = new ArrayList<>(batchSize); + List> raws = new ArrayList<>(batchSize); + List conversionFailures = new ArrayList<>(batchSize); addToRawHeaders(rawHeaders, convertedHeaders, natives, raws, conversionFailures); commonHeaders(acknowledgment, consumer, rawHeaders, keys, topics, partitions, offsets, timestampTypes,