PaperMC/Spigot-Server-Patches/0232-Fix-MC-117075-TE-Unload-Lag-Spike.patch
Aikar 0f2c274998 Improve Structures Checking
Improves performance by keying every chunk thats part of a structure to a hashmap
instead of only the first one.

This allows us to avoid iterating the entire structures value set to see
if a block position is inside of a structure.

This should have pretty decent performance improvement to any standard world
that has been around for a whilewith lots of structures due to ineffeciencies
in how MC stores structures (even unloaded chunks has structured data loaded)
2017-11-11 19:06:45 -05:00

26 lines
1.2 KiB
Diff

From 96892dd268a65e7af2375a9ccd7a2286dcbfa162 Mon Sep 17 00:00:00 2001
From: mezz <tehgeek@gmail.com>
Date: Wed, 9 Aug 2017 17:51:22 -0500
Subject: [PATCH] Fix MC-117075: TE Unload Lag Spike
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
index 30cf4a251..f690aaa10 100644
--- a/src/main/java/net/minecraft/server/World.java
+++ b/src/main/java/net/minecraft/server/World.java
@@ -1574,7 +1574,11 @@ public abstract class World implements IBlockAccess {
this.methodProfiler.c("blockEntities");
timings.tileEntityTick.startTiming(); // Spigot
if (!this.tileEntityListUnload.isEmpty()) {
- this.tileEntityListTick.removeAll(this.tileEntityListUnload);
+ // Paper start - Use alternate implementation with faster contains
+ java.util.Set<TileEntity> toRemove = java.util.Collections.newSetFromMap(new java.util.IdentityHashMap<>());
+ toRemove.addAll(tileEntityListUnload);
+ this.tileEntityListTick.removeAll(toRemove);
+ // Paper end
//this.tileEntityList.removeAll(this.tileEntityListUnload); // Paper - remove unused list
this.tileEntityListUnload.clear();
}
--
2.15.0