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));
}