From 319724f0b44274eb2f84b2d537ecc2e39e3aa6a5 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 18 Feb 2014 15:10:48 -0800 Subject: [PATCH] Regularly purge ResolvableType cache Update ResolvableType to call `purgeUnreferencedEntries` on the cache on each get. Issue: SPR-11394 --- .../main/java/org/springframework/core/ResolvableType.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/spring-core/src/main/java/org/springframework/core/ResolvableType.java b/spring-core/src/main/java/org/springframework/core/ResolvableType.java index 3a6d05752bb..6208bb0e765 100644 --- a/spring-core/src/main/java/org/springframework/core/ResolvableType.java +++ b/spring-core/src/main/java/org/springframework/core/ResolvableType.java @@ -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 { 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; }