diff --git a/Spigot-API-Patches/0002-Add-minimal-fastutil-int-based-collections.patch b/Spigot-API-Patches/0002-Add-minimal-fastutil-int-long-based-collections.patch similarity index 99% rename from Spigot-API-Patches/0002-Add-minimal-fastutil-int-based-collections.patch rename to Spigot-API-Patches/0002-Add-minimal-fastutil-int-long-based-collections.patch index 76155c394..351af959c 100644 --- a/Spigot-API-Patches/0002-Add-minimal-fastutil-int-based-collections.patch +++ b/Spigot-API-Patches/0002-Add-minimal-fastutil-int-long-based-collections.patch @@ -1,8 +1,10 @@ -From 8856eed99403409f9904fb8315ff4f2e95065239 Mon Sep 17 00:00:00 2001 +From bc17a29787a7d9c927d9812b74db623b9ca066b2 Mon Sep 17 00:00:00 2001 From: Aikar Date: Mon, 21 Mar 2016 18:17:14 -0400 -Subject: [PATCH] Add minimal fastutil int based collections +Subject: [PATCH] Add minimal fastutil int/long based collections +Importing entire FastUtil library would be massive. Just import minimal useful ones +we might actually use. diff --git a/src/main/java/it/unimi/dsi/fastutil/AbstractIndirectDoublePriorityQueue.java b/src/main/java/it/unimi/dsi/fastutil/AbstractIndirectDoublePriorityQueue.java new file mode 100644 diff --git a/Spigot-Server-Patches/0124-Use-FastUtil-Long-Int-HashMap-s.patch b/Spigot-Server-Patches/0124-Use-FastUtil-Long-Int-HashMap-s.patch new file mode 100644 index 000000000..bffa8b9bd --- /dev/null +++ b/Spigot-Server-Patches/0124-Use-FastUtil-Long-Int-HashMap-s.patch @@ -0,0 +1,56 @@ +From 7f072c4fec3c43714ecadef5b6931f789bf4f648 Mon Sep 17 00:00:00 2001 +From: Aikar +Date: Wed, 30 Mar 2016 02:13:24 -0400 +Subject: [PATCH] Use FastUtil Long/Int HashMap's + +For DataWatcher, swap out plain Integer key HashMap for a Int2ObjectOpenHashMap +For ChunkProviderServer, swap out CB's custom LongHashMap with Long2ObjectOpenHashMap + +These collections are super fast as seen +http://java-performance.info/hashmap-overview-jdk-fastutil-goldman-sachs-hppc-koloboke-trove-january-2015/ + +diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java +index f31ffe2..646197c 100644 +--- a/src/main/java/net/minecraft/server/ChunkProviderServer.java ++++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java +@@ -5,6 +5,7 @@ import java.util.Iterator; + import java.util.List; + + import com.destroystokyo.paper.exception.ServerInternalException; ++import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; // Paper + import org.apache.logging.log4j.LogManager; + import org.apache.logging.log4j.Logger; + +@@ -26,7 +27,7 @@ public class ChunkProviderServer implements IChunkProvider { + private final IChunkLoader chunkLoader; + // Paper start + protected Chunk lastChunkByPos = null; +- public LongObjectHashMap chunks = new LongObjectHashMap() { ++ public Long2ObjectOpenHashMap chunks = new Long2ObjectOpenHashMap() { + @Override + public Chunk get(long key) { + if (lastChunkByPos != null && key == lastChunkByPos.chunkKey) { +diff --git a/src/main/java/net/minecraft/server/DataWatcher.java b/src/main/java/net/minecraft/server/DataWatcher.java +index 26bec1c..88f340d 100644 +--- a/src/main/java/net/minecraft/server/DataWatcher.java ++++ b/src/main/java/net/minecraft/server/DataWatcher.java +@@ -11,13 +11,15 @@ import java.util.List; + import java.util.Map; + import java.util.concurrent.locks.ReadWriteLock; + import java.util.concurrent.locks.ReentrantReadWriteLock; ++ ++import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; // Paper + import org.apache.commons.lang3.ObjectUtils; + + public class DataWatcher { + + private static final Map, Integer> a = Maps.newHashMap(); + private final Entity b; +- private final Map> c = Maps.newHashMap(); ++ private final Map> c = new Int2ObjectOpenHashMap<>(); // Paper + private final ReadWriteLock d = new ReentrantReadWriteLock(); + private boolean e = true; + private boolean f; +-- +2.7.4 +