Skip to content

Commit 73bc6fe

Browse files
Cache compiled regex patterns in FileMatcher to improve performance
Co-authored-by: RoiSoleil <3462260+RoiSoleil@users.noreply.github.com>
1 parent 5eb2330 commit 73bc6fe

1 file changed

Lines changed: 18 additions & 1 deletion

File tree

org.moreunit.core/src/org/moreunit/core/matching/FileMatcher.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,16 @@
88

99
public class FileMatcher
1010
{
11+
// Use an LRU cache to prevent memory leaks from unbounded growth
12+
private static final int MAX_CACHE_SIZE = 1000;
13+
private static final java.util.Map<String, Pattern> PATTERN_CACHE = java.util.Collections.synchronizedMap(
14+
new java.util.LinkedHashMap<String, Pattern>(16, 0.75f, true) {
15+
@Override
16+
protected boolean removeEldestEntry(java.util.Map.Entry<String, Pattern> eldest) {
17+
return size() > MAX_CACHE_SIZE;
18+
}
19+
});
20+
1121
private final SrcFile file;
1222
private final SearchEngine searchEngine;
1323
private final FileMatchSelector matchSelector;
@@ -77,6 +87,13 @@ private Pattern createFileNamePattern(SrcFile file, Collection<String> correspon
7787
.append("|").append(extension.toUpperCase()) //
7888
.append(")");
7989

80-
return Pattern.compile(sb.toString());
90+
String regex = sb.toString();
91+
Pattern pattern = PATTERN_CACHE.get(regex);
92+
if (pattern == null)
93+
{
94+
pattern = Pattern.compile(regex);
95+
PATTERN_CACHE.put(regex, pattern);
96+
}
97+
return pattern;
8198
}
8299
}

0 commit comments

Comments
 (0)