From 0ab9c79a28fe9924bb59978e02a28a987e316066 Mon Sep 17 00:00:00 2001 From: themode Date: Fri, 13 Nov 2020 03:26:35 +0100 Subject: [PATCH] Prevent array resizing during server tick --- .../java/net/minestom/server/MinecraftServer.java | 4 ++-- .../server/thread/PerGroupChunkProvider.java | 13 ++++++++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/minestom/server/MinecraftServer.java b/src/main/java/net/minestom/server/MinecraftServer.java index 7c1be1707..c4b33591e 100644 --- a/src/main/java/net/minestom/server/MinecraftServer.java +++ b/src/main/java/net/minestom/server/MinecraftServer.java @@ -112,10 +112,10 @@ public final class MinecraftServer { @Setter private static boolean fixLighting = true; - // Rate Limiting + // Network monitoring private static int rateLimit = 300; private static int maxPacketSize = 30_000; - + // Network private static PacketListenerManager packetListenerManager; private static NettyServer nettyServer; diff --git a/src/main/java/net/minestom/server/thread/PerGroupChunkProvider.java b/src/main/java/net/minestom/server/thread/PerGroupChunkProvider.java index 347fa6cdd..f54c73083 100644 --- a/src/main/java/net/minestom/server/thread/PerGroupChunkProvider.java +++ b/src/main/java/net/minestom/server/thread/PerGroupChunkProvider.java @@ -120,7 +120,17 @@ public class PerGroupChunkProvider extends ThreadProvider { @NotNull @Override public List> update(long time) { - List> futures = new ArrayList<>(); + + List> futures; + int potentialSize = 0; + + // Compute the potential array size + { + for (Map longSetInstanceMap : instanceInstanceMap.values()) { + potentialSize += 1 + longSetInstanceMap.size(); + } + futures = new ArrayList<>(potentialSize); + } instanceInstanceMap.forEach((instance, instanceMap) -> { @@ -147,6 +157,7 @@ public class PerGroupChunkProvider extends ThreadProvider { chunksIndexes.forEach((long chunkIndex) -> processChunkTick(instance, chunkIndex, time)); }))); }); + return futures; }