From b69c59ce5f8afcf0037b9d3b6dc4b6f39c31a4ad Mon Sep 17 00:00:00 2001 From: Eric Anderson Date: Tue, 19 May 2015 09:36:15 -0700 Subject: [PATCH] Decrease ArrayDeque memory in SerializingExecutor By default, ArrayDeque will be of size 16, which is an overkill for most calls. "4" is not a magical number itself, but seems a better guess than 16 since we do have some knowledge of how much it will contain. Resolves #320 --- core/src/main/java/io/grpc/SerializingExecutor.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/io/grpc/SerializingExecutor.java b/core/src/main/java/io/grpc/SerializingExecutor.java index 1263f04525..65eaee199d 100644 --- a/core/src/main/java/io/grpc/SerializingExecutor.java +++ b/core/src/main/java/io/grpc/SerializingExecutor.java @@ -55,8 +55,10 @@ public final class SerializingExecutor implements Executor { private final Executor executor; /** A list of Runnables to be run in order. */ + // Initial size set to 4 because it is a nice number and at least the size necessary for handling + // a unary response: onHeaders + onPayload + onClose @GuardedBy("internalLock") - private final Queue waitQueue = new ArrayDeque(); + private final Queue waitQueue = new ArrayDeque(4); /** * We explicitly keep track of if the TaskRunner is currently scheduled to