From e8d9951ee8873b1a9be769655e970bdfb509d586 Mon Sep 17 00:00:00 2001 From: KHobbits Date: Wed, 17 Jul 2013 01:56:27 +0100 Subject: [PATCH] Add scaling object cap for usermap, prevent huge memory usage, also config file configurable. --- .../src/com/earth2me/essentials/ISettings.java | 14 ++++++++------ .../src/com/earth2me/essentials/Settings.java | 7 +++++++ .../src/com/earth2me/essentials/UserMap.java | 3 ++- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/ISettings.java b/Essentials/src/com/earth2me/essentials/ISettings.java index b9d7c1ed0..bbf11fcb1 100644 --- a/Essentials/src/com/earth2me/essentials/ISettings.java +++ b/Essentials/src/com/earth2me/essentials/ISettings.java @@ -146,7 +146,7 @@ public interface ISettings extends IConf boolean areDeathMessagesEnabled(); - public void setDebug(boolean debug); + void setDebug(boolean debug); Set getNoGodWorlds(); @@ -184,15 +184,17 @@ public interface ISettings extends IConf double getMaxWalkSpeed(); - public int getMailsPerMinute(); + int getMailsPerMinute(); - public long getEconomyLagWarning(); + long getEconomyLagWarning(); - public void setEssentialsChatActive(boolean b); + void setEssentialsChatActive(boolean b); long getMaxTempban(); - public Map getListGroupConfig(); + Map getListGroupConfig(); - public int getMaxNickLength(); + int getMaxNickLength(); + + int getMaxUserCacheCount(); } diff --git a/Essentials/src/com/earth2me/essentials/Settings.java b/Essentials/src/com/earth2me/essentials/Settings.java index e3916ddde..a10477e43 100644 --- a/Essentials/src/com/earth2me/essentials/Settings.java +++ b/Essentials/src/com/earth2me/essentials/Settings.java @@ -1105,4 +1105,11 @@ public class Settings implements net.ess3.api.ISettings { return config.getInt("max-nick-length", 30); } + + + public int getMaxUserCacheCount() + { + long count = Runtime.getRuntime().maxMemory() / 1024 / 96; + return config.getInt("max-user-cache-count", (int)count); + } } diff --git a/Essentials/src/com/earth2me/essentials/UserMap.java b/Essentials/src/com/earth2me/essentials/UserMap.java index c2912f377..6ee46b907 100644 --- a/Essentials/src/com/earth2me/essentials/UserMap.java +++ b/Essentials/src/com/earth2me/essentials/UserMap.java @@ -17,13 +17,14 @@ import org.bukkit.entity.Player; public class UserMap extends CacheLoader implements IConf { private final transient IEssentials ess; - private final transient Cache users = CacheBuilder.newBuilder().softValues().build(this); + private final transient Cache users; private final transient ConcurrentSkipListSet keys = new ConcurrentSkipListSet(); public UserMap(final IEssentials ess) { super(); this.ess = ess; + users = CacheBuilder.newBuilder().maximumSize(ess.getSettings().getMaxUserCacheCount()).softValues().build(this); loadAllUsersAsync(ess); }