Skip to content

Commit 38b9ae2

Browse files
K-jun98spring-builds
authored andcommitted
GH-4152: 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: #4152 Signed-off-by: gobeomjun <[email protected]> (cherry picked from commit 63613f7)
1 parent 5c173c1 commit 38b9ae2

File tree

1 file changed

+12
-11
lines changed

1 file changed

+12
-11
lines changed

spring-kafka/src/main/java/org/springframework/kafka/support/converter/BatchMessagingMessageConverter.java

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -169,17 +169,18 @@ public Message<?> toMessage(List<ConsumerRecord<?, ?>> records, @Nullable Acknow
169169
new KafkaMessageHeaders(this.generateMessageId, this.generateTimestamp);
170170

171171
Map<String, Object> rawHeaders = kafkaMessageHeaders.getRawHeaders();
172-
List<Object> payloads = new ArrayList<>();
173-
List<Object> keys = new ArrayList<>();
174-
List<String> topics = new ArrayList<>();
175-
List<Integer> partitions = new ArrayList<>();
176-
List<Long> offsets = new ArrayList<>();
177-
List<String> timestampTypes = new ArrayList<>();
178-
List<Long> timestamps = new ArrayList<>();
179-
List<Map<String, Object>> convertedHeaders = new ArrayList<>();
180-
List<Headers> natives = new ArrayList<>();
181-
List<ConsumerRecord<?, ?>> raws = new ArrayList<>();
182-
List<ConversionException> conversionFailures = new ArrayList<>();
172+
int batchSize = records.size();
173+
List<Object> payloads = new ArrayList<>(batchSize);
174+
List<Object> keys = new ArrayList<>(batchSize);
175+
List<String> topics = new ArrayList<>(batchSize);
176+
List<Integer> partitions = new ArrayList<>(batchSize);
177+
List<Long> offsets = new ArrayList<>(batchSize);
178+
List<String> timestampTypes = new ArrayList<>(batchSize);
179+
List<Long> timestamps = new ArrayList<>(batchSize);
180+
List<Map<String, Object>> convertedHeaders = new ArrayList<>(batchSize);
181+
List<Headers> natives = new ArrayList<>(batchSize);
182+
List<ConsumerRecord<?, ?>> raws = new ArrayList<>(batchSize);
183+
List<ConversionException> conversionFailures = new ArrayList<>(batchSize);
183184

184185
addToRawHeaders(rawHeaders, convertedHeaders, natives, raws, conversionFailures);
185186
commonHeaders(acknowledgment, consumer, rawHeaders, keys, topics, partitions, offsets, timestampTypes,

0 commit comments

Comments
 (0)