Remove Long2ObjectHashMap for Chunks
Speaking with Amaranth, his point of his implementation was that most of the lookups are on loaded chunks, so that code is optimized for that case. While Long2Object should be faster as a general purpose map, for MC uses, Amaranth's version should be faster. Will try to benchmark the 2 at some future.
This commit is contained in:
parent
d03da137f2
commit
78202f87b7
2 changed files with 33 additions and 56 deletions
|
@ -0,0 +1,33 @@
|
|||
From 4450f745a28e5709f5df9bb18e8347a47370301f 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 Int HashMap for DataWatcher
|
||||
|
||||
For DataWatcher, swap out plain Integer key HashMap for a Int2ObjectOpenHashMap
|
||||
|
||||
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/DataWatcher.java b/src/main/java/net/minecraft/server/DataWatcher.java
|
||||
index f1c62ec..68a0565 100644
|
||||
--- a/src/main/java/net/minecraft/server/DataWatcher.java
|
||||
+++ b/src/main/java/net/minecraft/server/DataWatcher.java
|
||||
@@ -11,13 +11,14 @@ 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.8.0
|
||||
|
|
@ -1,56 +0,0 @@
|
|||
From c12c8e716ed41b8cee8d9f1057d1e138b73d7169 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 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<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.8.0
|
||||
|
Loading…
Reference in a new issue