mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-18 12:48:53 +01:00
b4f8ae96a2
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.
62 lines
2.4 KiB
Diff
62 lines
2.4 KiB
Diff
From bcb5d85cb761fa898b684ad953bf253632d7d4be Mon Sep 17 00:00:00 2001
|
|
From: md_5 <git@md-5.net>
|
|
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 b00f635..5818cab 100644
|
|
--- a/src/main/java/org/spigotmc/SpigotConfig.java
|
|
+++ b/src/main/java/org/spigotmc/SpigotConfig.java
|
|
@@ -310,4 +310,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
|
|
|