mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-28 07:20:24 +01:00
Re-add fastutil map to Chunk map. Amaranth confirmed its faster by 3x
This commit is contained in:
parent
0726de949b
commit
48ba10bc77
2 changed files with 55 additions and 31 deletions
|
@ -1,31 +0,0 @@
|
|||
From 0000000000000000000000000000000000000000 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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/DataWatcher.java
|
||||
+++ b/src/main/java/net/minecraft/server/DataWatcher.java
|
||||
@@ -0,0 +0,0 @@ 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;
|
||||
--
|
55
Spigot-Server-Patches/Use-Optimized-Collections.patch
Normal file
55
Spigot-Server-Patches/Use-Optimized-Collections.patch
Normal file
|
@ -0,0 +1,55 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Aikar <aikar@aikar.co>
|
||||
Date: Wed, 30 Mar 2016 02:13:24 -0400
|
||||
Subject: [PATCH] Use Optimized Collections For DataWatcher, swap out plain
|
||||
Integer key HashMap for a Int2ObjectOpenHashMap For ChunkProviderServer, swap
|
||||
out CraftBukkit LongObjectHashMap with Long2ObjectOpenHashMap
|
||||
|
||||
Amaranth, the creator of LongObjectHashMap, tested it vs fastutil and determined fastutil to be 3x faster
|
||||
and could not create anything faster than fastutil.
|
||||
|
||||
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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
||||
@@ -0,0 +0,0 @@ import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import com.destroystokyo.paper.exception.ServerInternalException;
|
||||
+import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
@@ -0,0 +0,0 @@ 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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/DataWatcher.java
|
||||
+++ b/src/main/java/net/minecraft/server/DataWatcher.java
|
||||
@@ -0,0 +0,0 @@ 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;
|
||||
--
|
Loading…
Reference in a new issue