Browse Source

Regularly purge ResolvableType cache

Update ResolvableType to call `purgeUnreferencedEntries` on the cache
on each get.

Issue: SPR-11394
pull/466/head
Phillip Webb 12 years ago
parent
commit
319724f0b4
  1. 4
      spring-core/src/main/java/org/springframework/core/ResolvableType.java

4
spring-core/src/main/java/org/springframework/core/ResolvableType.java

@ -36,6 +36,7 @@ import org.springframework.core.SerializableTypeWrapper.TypeProvider; @@ -36,6 +36,7 @@ import org.springframework.core.SerializableTypeWrapper.TypeProvider;
import org.springframework.util.Assert;
import org.springframework.util.ClassUtils;
import org.springframework.util.ConcurrentReferenceHashMap;
import org.springframework.util.ConcurrentReferenceHashMap.ReferenceType;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
@ -1129,11 +1130,12 @@ public final class ResolvableType implements Serializable { @@ -1129,11 +1130,12 @@ public final class ResolvableType implements Serializable {
return NONE;
}
// Check the cache, we may have a ResolvableType that may have already been resolved
cache.purgeUnreferencedEntries();
ResolvableType key = new ResolvableType(type, typeProvider, variableResolver);
ResolvableType resolvableType = cache.get(key);
if (resolvableType == null) {
resolvableType = new ResolvableType(type, typeProvider, variableResolver, null);
cache.put(key, resolvableType);
cache.put(resolvableType, resolvableType);
}
return resolvableType;
}

Loading…
Cancel
Save