mirror of
https://github.com/PaperMC/Paper.git
synced 2024-09-27 06:03:09 +02:00
51 lines
2.6 KiB
Diff
51 lines
2.6 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Spottedleaf <Spottedleaf@users.noreply.github.com>
|
|
Date: Mon, 6 Apr 2020 17:39:25 -0700
|
|
Subject: [PATCH] Reduce memory footprint of CompoundTag
|
|
|
|
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 1cbc42c44911b71dfadebc2d60e0e5cb9b6cafe6..df246d69591e1a5822a0109c99b0f67996da71fa 100644
|
|
--- a/src/main/java/net/minecraft/nbt/CompoundTag.java
|
|
+++ b/src/main/java/net/minecraft/nbt/CompoundTag.java
|
|
@@ -49,7 +49,7 @@ public class CompoundTag implements Tag {
|
|
|
|
private static CompoundTag loadCompound(DataInput input, NbtAccounter tracker) throws IOException {
|
|
tracker.accountBytes(48L);
|
|
- 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 CompoundTag
|
|
|
|
byte b;
|
|
while ((b = input.readByte()) != 0) {
|
|
@@ -166,7 +166,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 CompoundTag
|
|
}
|
|
|
|
@Override
|
|
@@ -481,8 +481,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 CompoundTag
|
|
+ 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 CompoundTag
|
|
}
|
|
|
|
@Override
|