From c12c8e716ed41b8cee8d9f1057d1e138b73d7169 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 f1c62ec..deb9643 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.8.0