From e6b1f0a139293be2ea90da754218c7fd282f836a Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Mon, 9 Nov 2015 09:38:48 -0800 Subject: [PATCH] Use constants when caching empty arrays Reduce cache memory consumption by using a single constant for empty arrays. --- .../java/org/springframework/util/ReflectionUtils.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/spring-core/src/main/java/org/springframework/util/ReflectionUtils.java b/spring-core/src/main/java/org/springframework/util/ReflectionUtils.java index 209599a087..ae90ecbed4 100644 --- a/spring-core/src/main/java/org/springframework/util/ReflectionUtils.java +++ b/spring-core/src/main/java/org/springframework/util/ReflectionUtils.java @@ -51,6 +51,10 @@ public abstract class ReflectionUtils { */ private static final String CGLIB_RENAMED_METHOD_PREFIX = "CGLIB$"; + private static final Method[] NO_METHODS = {}; + + private static final Field[] NO_FIELDS = {}; + /** * Cache for {@link Class#getDeclaredMethods()} plus equivalent default methods * from Java 8 based interfaces, allowing for fast iteration. @@ -617,7 +621,7 @@ public abstract class ReflectionUtils { else { result = declaredMethods; } - declaredMethodsCache.put(clazz, result); + declaredMethodsCache.put(clazz, (result.length == 0 ? NO_METHODS : result)); } return result; } @@ -705,7 +709,7 @@ public abstract class ReflectionUtils { Field[] result = declaredFieldsCache.get(clazz); if (result == null) { result = clazz.getDeclaredFields(); - declaredFieldsCache.put(clazz, result); + declaredFieldsCache.put(clazz, (result.length == 0 ? NO_FIELDS : result)); } return result; }