mirror of
https://github.com/PaperMC/Paper.git
synced 2024-09-15 08:28:01 +02:00
4104545b11
"It was from a different time before books were as jank as they are now. As time has gone on they've only proven to be worse and worse."
51 lines
2.6 KiB
Diff
51 lines
2.6 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Spottedleaf <spottedleaf@spottedleaf.dev>
|
|
Date: Mon, 6 Apr 2020 17:39:25 -0700
|
|
Subject: [PATCH] Reduce memory footprint of NBTTagCompound
|
|
|
|
Fastutil maps are going to have a lower memory footprint - which
|
|
is important because we clone chunk data after reading it for safety.
|
|
So, reduce the impact of the clone on GC.
|
|
|
|
diff --git a/src/main/java/net/minecraft/nbt/CompoundTag.java b/src/main/java/net/minecraft/nbt/CompoundTag.java
|
|
index 750df4ab2fbfdcf759f4d3451340e66b6764391d..1aa3af8c7714b2c850fb4264c863db8e639e6284 100644
|
|
--- a/src/main/java/net/minecraft/nbt/CompoundTag.java
|
|
+++ b/src/main/java/net/minecraft/nbt/CompoundTag.java
|
|
@@ -34,7 +34,7 @@ public class CompoundTag implements Tag {
|
|
if (i > 512) {
|
|
throw new RuntimeException("Tried to read NBT tag with too high complexity, depth > 512");
|
|
} else {
|
|
- Map<String, Tag> map = Maps.newHashMap();
|
|
+ it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap<String, Tag> map = new it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap<>(8, 0.8f); // Paper - reduce memory footprint of NBTTagCompound
|
|
|
|
byte b;
|
|
while((b = CompoundTag.readNamedTagType(dataInput, nbtAccounter)) != 0) {
|
|
@@ -67,7 +67,7 @@ public class CompoundTag implements Tag {
|
|
}
|
|
|
|
public CompoundTag() {
|
|
- this(Maps.newHashMap());
|
|
+ this(new it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap<>(8, 0.8f)); // Paper - reduce memory footprint of NBTTagCompound
|
|
}
|
|
|
|
@Override
|
|
@@ -374,8 +374,16 @@ public class CompoundTag implements Tag {
|
|
|
|
@Override
|
|
public CompoundTag copy() {
|
|
- Map<String, Tag> map = Maps.newHashMap(Maps.transformValues(this.tags, Tag::copy));
|
|
- return new CompoundTag(map);
|
|
+ // Paper start - reduce memory footprint of NBTTagCompound
|
|
+ it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap<String, Tag> ret = new it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap<>(this.tags.size(), 0.8f);
|
|
+ java.util.Iterator<java.util.Map.Entry<String, Tag>> iterator = (this.tags instanceof it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap) ? ((it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap)this.tags).object2ObjectEntrySet().fastIterator() : this.tags.entrySet().iterator();
|
|
+ while (iterator.hasNext()) {
|
|
+ Map.Entry<String, Tag> entry = iterator.next();
|
|
+ ret.put(entry.getKey(), entry.getValue().copy());
|
|
+ }
|
|
+
|
|
+ return new CompoundTag(ret);
|
|
+ // Paper end - reduce memory footprint of NBTTagCompound
|
|
}
|
|
|
|
@Override
|