Fix issues with IntIdentityHashBiMiap
This commit is contained in:
parent
5cfc0781d6
commit
76879ba957
66 changed files with 4 additions and 1 deletions
|
@ -1,65 +0,0 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Andrew Steinborn <git@steinborn.me>
|
||||
Date: Mon, 23 Jul 2018 13:08:19 -0400
|
||||
Subject: [PATCH] Optimize IntIdentityHashBiMiap#nextId()
|
||||
|
||||
Optimizes CrudeIncrementalIntIdentityHashBiMap#nextId()
|
||||
|
||||
This is a frequent hotspot for world loading/saving.
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/util/CrudeIncrementalIntIdentityHashBiMap.java b/src/main/java/net/minecraft/util/CrudeIncrementalIntIdentityHashBiMap.java
|
||||
index dc7528b41aa9a55807a2b3e33d5668e1be681e79..a002218caed08bf4a4072d934e1094c22ee35534 100644
|
||||
--- a/src/main/java/net/minecraft/util/CrudeIncrementalIntIdentityHashBiMap.java
|
||||
+++ b/src/main/java/net/minecraft/util/CrudeIncrementalIntIdentityHashBiMap.java
|
||||
@@ -16,11 +16,13 @@ public class CrudeIncrementalIntIdentityHashBiMap<K> implements IdMap<K> {
|
||||
private K[] byId;
|
||||
private int nextId;
|
||||
private int size;
|
||||
+ private java.util.BitSet usedIds; // Paper
|
||||
|
||||
private CrudeIncrementalIntIdentityHashBiMap(int size) {
|
||||
this.keys = (K[])(new Object[size]);
|
||||
this.values = new int[size];
|
||||
this.byId = (K[])(new Object[size]);
|
||||
+ this.usedIds = new java.util.BitSet(); // Paper
|
||||
}
|
||||
|
||||
public static <A> CrudeIncrementalIntIdentityHashBiMap<A> create(int expectedSize) {
|
||||
@@ -57,9 +59,13 @@ public class CrudeIncrementalIntIdentityHashBiMap<K> implements IdMap<K> {
|
||||
}
|
||||
|
||||
private int nextId() {
|
||||
+ /* // Paper start
|
||||
while(this.nextId < this.byId.length && this.byId[this.nextId] != null) {
|
||||
++this.nextId;
|
||||
}
|
||||
+ */
|
||||
+ this.nextId = this.usedIds.nextClearBit(0);
|
||||
+ // Paper end
|
||||
|
||||
return this.nextId;
|
||||
}
|
||||
@@ -80,6 +86,7 @@ public class CrudeIncrementalIntIdentityHashBiMap<K> implements IdMap<K> {
|
||||
this.byId = crudeIncrementalIntIdentityHashBiMap.byId;
|
||||
this.nextId = crudeIncrementalIntIdentityHashBiMap.nextId;
|
||||
this.size = crudeIncrementalIntIdentityHashBiMap.size;
|
||||
+ this.usedIds.clear(); // Paper
|
||||
}
|
||||
|
||||
public void addMapping(K value, int id) {
|
||||
@@ -96,6 +103,7 @@ public class CrudeIncrementalIntIdentityHashBiMap<K> implements IdMap<K> {
|
||||
this.keys[k] = value;
|
||||
this.values[k] = id;
|
||||
this.byId[id] = value;
|
||||
+ this.usedIds.set(id); // Paper
|
||||
++this.size;
|
||||
if (id == this.nextId) {
|
||||
++this.nextId;
|
||||
@@ -157,6 +165,7 @@ public class CrudeIncrementalIntIdentityHashBiMap<K> implements IdMap<K> {
|
||||
Arrays.fill(this.byId, (Object)null);
|
||||
this.nextId = 0;
|
||||
this.size = 0;
|
||||
+ this.usedIds.clear(); // Paper
|
||||
}
|
||||
|
||||
@Override
|
|
@ -8,7 +8,7 @@ Add -Ddebug.entities=true to your JVM flags to gain more information
|
|||
1.17: Needs to be reworked for new entity storage system
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
|
||||
index 1a62a21d40c583f9cbf2b8fbb63b691fffb71ae0..6af70073e1ee0290ec30392153c2c18dfeffa0e8 100644
|
||||
index a268ea70d084465bf2ba0550083a136540d88734..0727c025e87e889861b2f3e78e28d4d17840ff54 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
|
||||
@@ -1319,6 +1319,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
|
Loading…
Add table
Add a link
Reference in a new issue