You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2013/09/11 16:27:27 UTC
svn commit: r1521871 - in /tomcat/tc7.0.x/trunk: ./
java/org/apache/tomcat/util/res/StringManager.java
Author: markt
Date: Wed Sep 11 14:27:27 2013
New Revision: 1521871
URL: http://svn.apache.org/r1521871
Log:
Put a limit on the number of Locale to StringManager mappings that will be cached.
Modified:
tomcat/tc7.0.x/trunk/ (props changed)
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/res/StringManager.java
Propchange: tomcat/tc7.0.x/trunk/
------------------------------------------------------------------------------
Merged /tomcat/trunk:r1521840
Modified: tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/res/StringManager.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/res/StringManager.java?rev=1521871&r1=1521870&r2=1521871&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/res/StringManager.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/res/StringManager.java Wed Sep 11 14:27:27 2013
@@ -20,6 +20,7 @@ package org.apache.tomcat.util.res;
import java.text.MessageFormat;
import java.util.Enumeration;
import java.util.Hashtable;
+import java.util.LinkedHashMap;
import java.util.Locale;
import java.util.Map;
import java.util.MissingResourceException;
@@ -54,6 +55,8 @@ import java.util.ResourceBundle;
public class StringManager {
+ private static int LOCALE_CACHE_SIZE = 10;
+
/**
* The ResourceBundle for this StringManager.
*/
@@ -198,7 +201,25 @@ public class StringManager {
Map<Locale,StringManager> map = managers.get(packageName);
if (map == null) {
- map = new Hashtable<Locale, StringManager>();
+ /*
+ * Don't want the HashMap to be expanded beyond LOCALE_CACHE_SIZE.
+ * Expansion occurs when size() exceeds capacity. Therefore keep
+ * size at or below capacity.
+ * removeEldestEntry() executes after insertion therefore the test
+ * for removal needs to use one less than the maximum desired size
+ *
+ */
+ map = new LinkedHashMap<Locale,StringManager>(LOCALE_CACHE_SIZE, 1, true) {
+ private static final long serialVersionUID = 1L;
+ @Override
+ protected boolean removeEldestEntry(
+ Map.Entry<Locale,StringManager> eldest) {
+ if (size() > (LOCALE_CACHE_SIZE - 1)) {
+ return true;
+ }
+ return false;
+ }
+ };
managers.put(packageName, map);
}
@@ -230,6 +251,4 @@ public class StringManager {
// Return the default
return getManager(packageName);
}
-
-
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org