[Schmitzm-commits] r2033 - trunk/schmitzm-core/src/main/java/de/schmitzm/regex
scm-commit at wald.intevation.org
scm-commit at wald.intevation.org
Sun May 27 23:01:06 CEST 2012
Author: alfonx
Date: 2012-05-27 23:01:05 +0200 (Sun, 27 May 2012)
New Revision: 2033
Modified:
trunk/schmitzm-core/src/main/java/de/schmitzm/regex/RegexCache.java
Log:
Make use if RegExCache replaceAll instead of String.replaceAll for performance reasons
Modified: trunk/schmitzm-core/src/main/java/de/schmitzm/regex/RegexCache.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/regex/RegexCache.java 2012-05-27 20:14:02 UTC (rev 2032)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/regex/RegexCache.java 2012-05-27 21:01:05 UTC (rev 2033)
@@ -25,7 +25,7 @@
* Matcher-Cache für Regex+Value verwenden? Durch die methode mather.reset wird pro Thread ein Matcher
* wiederverwendet
*/
- public static boolean matcherCacheEnabled = true;
+ public static boolean matcherCacheEnabled = false;
/**
* Regex-Auswertungen komplett cachen
@@ -36,30 +36,30 @@
* TODO Ein String der länger ist als die hier angegebene Anzahl Zeichen wir nicht gecached. Die Wahrscheinlichkeit,
* dass der selbe Sting nochmal auftaucht wird als zu gering eingeschätzt.
**/
- private static final int CACHE_VALUES_TO_RESULT_MAX_VALUE_LENGTH = 500;
+ private static final int CACHE_VALUES_TO_RESULT_MAX_VALUE_LENGTH = 100;
/**
* TODO Ein String der kürzer als die hier angegebene Anzahl Zeichen wir nicht gecached.
**/
- private static final int CACHE_VALUES_TO_RESULT_MIN_VALUE_LENGTH = 10;
+ private static final int CACHE_VALUES_TO_RESULT_MIN_VALUE_LENGTH = 1;
- private final ConcurrentLRUCache<String, ThreadLocal<Matcher>> matchersCachedThreadLocalPerRegex = new ConcurrentLRUCache<String, ThreadLocal<Matcher>>(
- 25000, 15000);
+ private final ConcurrentLRUCache<String, ThreadLocal<Matcher>> matchersCache = new ConcurrentLRUCache<String, ThreadLocal<Matcher>>(
+ 55000, 45000);
private static RegexCache singletonInstance;
- private final ConcurrentLRUCache<String, Pattern> patternCache = new ConcurrentLRUCache<String, Pattern>(50000,
- 35000);
+ private final ConcurrentLRUCache<String, Pattern> patternCache = new ConcurrentLRUCache<String, Pattern>(70000,
+ 50000);
public static RegexCache getInstance() {
return singletonInstance != null ? singletonInstance : new RegexCache();
}
private final ConcurrentLRUCache<String, MyMatchResult> resultsCache = new ConcurrentLRUCache<String, MyMatchResult>(
- 100000, 80000);
+ 200000, 150000);
private RegexCache() {
- singletonInstance=this;
+ singletonInstance = this;
}
/**
@@ -75,7 +75,7 @@
return getPattern(regex).matcher(text);
}
- ThreadLocal<Matcher> threadLocal = matchersCachedThreadLocalPerRegex.get(regex);
+ ThreadLocal<Matcher> threadLocal = matchersCache.get(regex);
if (threadLocal == null) {
@@ -86,7 +86,9 @@
return getPattern(regex).matcher("");
}
};
- matchersCachedThreadLocalPerRegex.put(regex, threadLocal);
+ matchersCache.put(regex, threadLocal);
+
+ return threadLocal.get();
}
return threadLocal.get().reset(text);
@@ -177,7 +179,7 @@
* Liefert die aktuellen Statistiken des ResultsCache
*/
public Stats getMatcherCacheStats() {
- return matchersCachedThreadLocalPerRegex.getStats();
+ return matchersCache.getStats();
}
/**
@@ -224,9 +226,9 @@
patternCache.destroy();
}
- if (matchersCachedThreadLocalPerRegex != null) {
- matchersCachedThreadLocalPerRegex.clear();
- matchersCachedThreadLocalPerRegex.destroy();
+ if (matchersCache != null) {
+ matchersCache.clear();
+ matchersCache.destroy();
}
}
@@ -248,4 +250,30 @@
}
+ /**
+ * Ist einem {@link String#replaceAll(String, String)} vorzuziehen, da hier das Pattern nicht immer neu erstellt
+ * werden muss.
+ *
+ * @param text
+ * @param regex
+ * @param replacement
+ */
+ public String replaceAll(String text, String regex, String replacement) {
+ Matcher matcher = getMatcher(regex, text);
+ return matcher.replaceAll(replacement);
+ }
+
+ /**
+ * Ist einem {@link String#replaceFirst(String, String)} vorzuziehen, da hier das Pattern nicht immer neu erstellt
+ * werden muss.
+ *
+ * @param text
+ * @param regex
+ * @param replacement
+ */
+ public String replaceFirst(String text, String regex, String replacement) {
+ Matcher matcher = getMatcher(regex, text);
+ return matcher.replaceFirst(replacement);
+ }
+
}
More information about the Schmitzm-commits
mailing list