diff --git a/core/pom.xml b/core/pom.xml index 242857cf..85a2af91 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -46,6 +46,12 @@ 1.0-SNAPSHOT compile + + net.jodah + expiringmap + 0.5.8 + compile + @@ -70,6 +76,10 @@ co.aikar.locales co.aikar.commands.locales + + net.jodah.expiringmap + co.aikar.commands.lib.expiringmap + diff --git a/core/src/main/java/co/aikar/commands/ACFPatterns.java b/core/src/main/java/co/aikar/commands/ACFPatterns.java index 8e86ab7d..e32fbd1f 100644 --- a/core/src/main/java/co/aikar/commands/ACFPatterns.java +++ b/core/src/main/java/co/aikar/commands/ACFPatterns.java @@ -24,8 +24,11 @@ package co.aikar.commands; import com.google.common.collect.Maps; +import net.jodah.expiringmap.ExpirationPolicy; +import net.jodah.expiringmap.ExpiringMap; import java.util.Map; +import java.util.concurrent.TimeUnit; import java.util.regex.Pattern; @SuppressWarnings("WeakerAccess") @@ -51,7 +54,12 @@ final class ACFPatterns { private ACFPatterns() {} @SuppressWarnings("Convert2MethodRef") - static final Map patternCache = Maps.newHashMap(); + static final Map patternCache = ExpiringMap.builder() + .maxSize(200) + .expiration(1, TimeUnit.HOURS) + .expirationPolicy(ExpirationPolicy.ACCESSED) + .build(); + public static Pattern getPattern(String pattern) { return patternCache.computeIfAbsent(pattern, s -> Pattern.compile(pattern)); }