diff options
Diffstat (limited to 'CraftBukkit-Patches/0143-Prevent-Unbounded-IntCache-Growth.patch')
-rw-r--r-- | CraftBukkit-Patches/0143-Prevent-Unbounded-IntCache-Growth.patch | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/CraftBukkit-Patches/0143-Prevent-Unbounded-IntCache-Growth.patch b/CraftBukkit-Patches/0143-Prevent-Unbounded-IntCache-Growth.patch new file mode 100644 index 0000000000..80e0420677 --- /dev/null +++ b/CraftBukkit-Patches/0143-Prevent-Unbounded-IntCache-Growth.patch @@ -0,0 +1,62 @@ +From 29560010d8f7d2333647671b313fb2a55085df36 Mon Sep 17 00:00:00 2001 +From: md_5 <[email protected]> +Date: Fri, 20 Jun 2014 19:40:00 +1000 +Subject: [PATCH] Prevent Unbounded IntCache Growth + +Based on work by Peter Lawrey, this commit prevents unbounded growth of the integer cache and instead caps it to a value specified in the configuration (1024 by default). Should prevent thrashing, especially around world generation. + +diff --git a/src/main/java/net/minecraft/server/IntCache.java b/src/main/java/net/minecraft/server/IntCache.java +index 9858720..47e06df 100644 +--- a/src/main/java/net/minecraft/server/IntCache.java ++++ b/src/main/java/net/minecraft/server/IntCache.java +@@ -17,11 +17,11 @@ public class IntCache { + if (i <= 256) { + if (b.isEmpty()) { + aint = new int[256]; +- c.add(aint); ++ if (c.size() < org.spigotmc.SpigotConfig.intCacheLimit) c.add(aint); + return aint; + } else { + aint = (int[]) b.remove(b.size() - 1); +- c.add(aint); ++ if (c.size() < org.spigotmc.SpigotConfig.intCacheLimit) c.add(aint); + return aint; + } + } else if (i > a) { +@@ -29,15 +29,15 @@ public class IntCache { + d.clear(); + e.clear(); + aint = new int[a]; +- e.add(aint); ++ if (e.size() < org.spigotmc.SpigotConfig.intCacheLimit) e.add(aint); + return aint; + } else if (d.isEmpty()) { + aint = new int[a]; +- e.add(aint); ++ if (e.size() < org.spigotmc.SpigotConfig.intCacheLimit) e.add(aint); + return aint; + } else { + aint = (int[]) d.remove(d.size() - 1); +- e.add(aint); ++ if (e.size() < org.spigotmc.SpigotConfig.intCacheLimit) e.add(aint); + return aint; + } + } +diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java +index 00b7cad..7998aac 100644 +--- a/src/main/java/org/spigotmc/SpigotConfig.java ++++ b/src/main/java/org/spigotmc/SpigotConfig.java +@@ -321,4 +321,10 @@ public class SpigotConfig + { + saveUserCacheOnStopOnly = getBoolean( "settings.save-user-cache-on-stop-only", false ); + } ++ ++ public static int intCacheLimit; ++ private static void intCacheLimit() ++ { ++ intCacheLimit = getInt( "settings.int-cache-limit", 1024 ); ++ } + } +-- +1.9.1 + |