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/
This commit is contained in:
parent
a785a9460e
commit
f051ea2ab3
2 changed files with 60 additions and 2 deletions
|
@ -1,8 +1,10 @@
|
||||||
From 8856eed99403409f9904fb8315ff4f2e95065239 Mon Sep 17 00:00:00 2001
|
From bc17a29787a7d9c927d9812b74db623b9ca066b2 Mon Sep 17 00:00:00 2001
|
||||||
From: Aikar <aikar@aikar.co>
|
From: Aikar <aikar@aikar.co>
|
||||||
Date: Mon, 21 Mar 2016 18:17:14 -0400
|
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
|
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
|
new file mode 100644
|
|
@ -0,0 +1,56 @@
|
||||||
|
From 7f072c4fec3c43714ecadef5b6931f789bf4f648 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Aikar <aikar@aikar.co>
|
||||||
|
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<Chunk> chunks = new LongObjectHashMap<Chunk>() {
|
||||||
|
+ public Long2ObjectOpenHashMap<Chunk> chunks = new Long2ObjectOpenHashMap<Chunk>() {
|
||||||
|
@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<Class<? extends Entity>, Integer> a = Maps.newHashMap();
|
||||||
|
private final Entity b;
|
||||||
|
- private final Map<Integer, DataWatcher.Item<?>> c = Maps.newHashMap();
|
||||||
|
+ private final Map<Integer, DataWatcher.Item<?>> c = new Int2ObjectOpenHashMap<>(); // Paper
|
||||||
|
private final ReadWriteLock d = new ReentrantReadWriteLock();
|
||||||
|
private boolean e = true;
|
||||||
|
private boolean f;
|
||||||
|
--
|
||||||
|
2.7.4
|
||||||
|
|
Loading…
Reference in a new issue