aboutsummaryrefslogtreecommitdiffhomepage
path: root/CraftBukkit-Patches/0143-Prevent-Unbounded-IntCache-Growth.patch
diff options
context:
space:
mode:
Diffstat (limited to 'CraftBukkit-Patches/0143-Prevent-Unbounded-IntCache-Growth.patch')
-rw-r--r--CraftBukkit-Patches/0143-Prevent-Unbounded-IntCache-Growth.patch62
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
+