From 5121839a20fa4b458f7a22946b40923405568734 Mon Sep 17 00:00:00 2001 From: md_5 Date: Fri, 13 Dec 2013 11:45:47 +1100 Subject: [PATCH] Optimize DataWatcher Use primitive orientated collections, as well as more effective copies across collections. diff --git a/src/main/java/net/minecraft/server/DataWatcher.java b/src/main/java/net/minecraft/server/DataWatcher.java index 90a2a80..5402e5c 100644 --- a/src/main/java/net/minecraft/server/DataWatcher.java +++ b/src/main/java/net/minecraft/server/DataWatcher.java @@ -14,8 +14,8 @@ public class DataWatcher { private final Entity a; private boolean b = true; - private static final HashMap c = new HashMap(); - private final Map d = new HashMap(); + private static final gnu.trove.map.TObjectIntMap c = new gnu.trove.map.hash.TObjectIntHashMap(); // Spigot + private final gnu.trove.map.TIntObjectMap d = new gnu.trove.map.hash.TIntObjectHashMap(); // Spigot private boolean e; private ReadWriteLock f = new ReentrantReadWriteLock(); @@ -36,7 +36,7 @@ public class DataWatcher { WatchableObject watchableobject = new WatchableObject(integer.intValue(), i, object); this.f.writeLock().lock(); - this.d.put(Integer.valueOf(i), watchableobject); + this.d.put(i, watchableobject); // Spigot this.f.writeLock().unlock(); this.b = false; } @@ -46,7 +46,7 @@ public class DataWatcher { WatchableObject watchableobject = new WatchableObject(j, i, null); this.f.writeLock().lock(); - this.d.put(Integer.valueOf(i), watchableobject); + this.d.put(i, watchableobject); // Spigot this.f.writeLock().unlock(); this.b = false; } @@ -81,7 +81,7 @@ public class DataWatcher { WatchableObject watchableobject; try { - watchableobject = (WatchableObject) this.d.get(Integer.valueOf(i)); + watchableobject = (WatchableObject) this.d.get(i); // Spigot } catch (Throwable throwable) { CrashReport crashreport = CrashReport.a(throwable, "Getting synched entity data"); CrashReportSystemDetails crashreportsystemdetails = crashreport.a("Synched entity data"); @@ -133,7 +133,7 @@ public class DataWatcher { if (this.e) { this.f.readLock().lock(); - Iterator iterator = this.d.values().iterator(); + Iterator iterator = this.d.valueCollection().iterator(); // Spigot while (iterator.hasNext()) { WatchableObject watchableobject = (WatchableObject) iterator.next(); @@ -157,7 +157,7 @@ public class DataWatcher { public void a(PacketDataSerializer packetdataserializer) { this.f.readLock().lock(); - Iterator iterator = this.d.values().iterator(); + Iterator iterator = this.d.valueCollection().iterator(); // Spigot while (iterator.hasNext()) { WatchableObject watchableobject = (WatchableObject) iterator.next(); @@ -170,18 +170,11 @@ public class DataWatcher { } public List c() { - ArrayList arraylist = null; + ArrayList arraylist = new ArrayList(); // Spigot this.f.readLock().lock(); - WatchableObject watchableobject; - - for (Iterator iterator = this.d.values().iterator(); iterator.hasNext(); arraylist.add(watchableobject)) { - watchableobject = (WatchableObject) iterator.next(); - if (arraylist == null) { - arraylist = new ArrayList(); - } - } + arraylist.addAll(this.d.valueCollection()); // Spigot this.f.readLock().unlock(); return arraylist; @@ -295,12 +288,14 @@ public class DataWatcher { } static { - c.put(Byte.class, Integer.valueOf(0)); - c.put(Short.class, Integer.valueOf(1)); - c.put(Integer.class, Integer.valueOf(2)); - c.put(Float.class, Integer.valueOf(3)); - c.put(String.class, Integer.valueOf(4)); - c.put(ItemStack.class, Integer.valueOf(5)); - c.put(ChunkCoordinates.class, Integer.valueOf(6)); + // Spigot Start - remove valueOf + c.put(Byte.class, 0); + c.put(Short.class, 1); + c.put(Integer.class, 2); + c.put(Float.class, 3); + c.put(String.class, 4); + c.put(ItemStack.class, 5); + c.put(ChunkCoordinates.class, 6); + // Spigot End } } -- 1.8.3.2