Author: kkolinko Date: Fri Sep 12 21:46:59 2014 New Revision: 1624655 URL: http://svn.apache.org/r1624655 Log: Memory efficiency: Use a shared emptySet() as the value for JavaClassCacheEntry.sciSet when there are no SCIs for a class.
Modified: tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java Modified: tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java?rev=1624655&r1=1624654&r2=1624655&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java (original) +++ tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java Fri Sep 12 21:46:59 2014 @@ -163,6 +163,13 @@ public class ContextConfig implements Li new ConcurrentHashMap<>(); + /** + * Set used as the value for {@code JavaClassCacheEntry.sciSet} when there + * are no SCIs associated with a class. + */ + private static final Set<ServletContainerInitializer> EMPTY_SCI_SET = Collections.emptySet(); + + // ----------------------------------------------------- Instance Variables /** * Custom mappings of login methods to authenticators @@ -2044,7 +2051,7 @@ public class ContextConfig implements Li classHierarchyToString(className, entry))); } } - if (entry.getSciSet().size() > 0) { + if (!entry.getSciSet().isEmpty()) { // Need to try and load the class clazz = Introspection.loadClass(context, className); if (clazz == null) { @@ -2052,8 +2059,7 @@ public class ContextConfig implements Li return; } - for (ServletContainerInitializer sci : - entry.getSciSet()) { + for (ServletContainerInitializer sci : entry.getSciSet()) { Set<Class<?>> classes = initializerClassMap.get(sci); if (classes == null) { classes = new HashSet<>(); @@ -2165,7 +2171,7 @@ public class ContextConfig implements Li // Avoid an infinite loop with java.lang.Object if (cacheEntry.equals(superClassCacheEntry)) { - cacheEntry.setSciSet(new HashSet<ServletContainerInitializer>()); + cacheEntry.setSciSet(EMPTY_SCI_SET); return; } @@ -2194,7 +2200,7 @@ public class ContextConfig implements Li result.addAll(getSCIsForClass(interfaceName)); } - cacheEntry.setSciSet(result); + cacheEntry.setSciSet(result.isEmpty() ? EMPTY_SCI_SET : result); } private Set<ServletContainerInitializer> getSCIsForClass(String className) { @@ -2207,7 +2213,7 @@ public class ContextConfig implements Li } } } - return Collections.emptySet(); + return EMPTY_SCI_SET; } private static final String getClassName(String internalForm) { --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org