From e3337c3fcaf9bddbe89acec285b2786b9ffd2f47 Mon Sep 17 00:00:00 2001 From: Norman Maurer Date: Thu, 30 Nov 2023 16:42:08 +0100 Subject: [PATCH] StreamTracker should better extend ArrayDeque to reduce memory copies Motivation: StreamTracker did extend ArrayList which is not optimal as we always remove from index 0 and so cause memory copies. Modifications: Let StreamTracker extend ArrayDeque so removals dont cause memory copies all the time Result: Less memory copies --- .../java/io/netty/incubator/codec/http3/QpackEncoder.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/netty/incubator/codec/http3/QpackEncoder.java b/src/main/java/io/netty/incubator/codec/http3/QpackEncoder.java index 2b4d5cb..835fc7f 100644 --- a/src/main/java/io/netty/incubator/codec/http3/QpackEncoder.java +++ b/src/main/java/io/netty/incubator/codec/http3/QpackEncoder.java @@ -21,7 +21,7 @@ import io.netty.util.ReferenceCountUtil; import io.netty.util.collection.LongObjectHashMap; -import java.util.ArrayList; +import java.util.ArrayDeque; import java.util.Map; import static io.netty.incubator.codec.http3.Http3CodecUtils.closeOnFailure; @@ -495,13 +495,13 @@ private boolean mayNotBlockStream() { return blockedStreams >= maxBlockedStreams - 1; } - private static final class StreamTracker extends ArrayList { + private static final class StreamTracker extends ArrayDeque { StreamTracker() { super(1); // we will mostly have a single header block in a stream. } int takeNextInsertCount() { - return isEmpty() ? -1 : remove(0); + return isEmpty() ? -1 : poll(); } } }