From eb378919bb485836a0ef9de3c9cabe296105ff93 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Thu, 2 Apr 2020 15:29:43 +0200 Subject: [PATCH] DATAREST-1502 - Use ConcurrentHashMap in PersistentEntitiesResourceMappings instead of ConcurrentReferenceHashMap. We use now consistently ConcurrentHashMap instead of ConcurrentReferenceHashMap to avoid object eviction by GC runs as some caches are accessed in a way that does not allow for lazy recomputation of values. --- .../core/mapping/PersistentEntitiesResourceMappings.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/spring-data-rest-core/src/main/java/org/springframework/data/rest/core/mapping/PersistentEntitiesResourceMappings.java b/spring-data-rest-core/src/main/java/org/springframework/data/rest/core/mapping/PersistentEntitiesResourceMappings.java index a6ef045ea..d6148f0fa 100644 --- a/spring-data-rest-core/src/main/java/org/springframework/data/rest/core/mapping/PersistentEntitiesResourceMappings.java +++ b/spring-data-rest-core/src/main/java/org/springframework/data/rest/core/mapping/PersistentEntitiesResourceMappings.java @@ -21,6 +21,7 @@ import java.util.HashSet; import java.util.Iterator; import java.util.Map; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; import org.springframework.data.mapping.PersistentEntity; import org.springframework.data.mapping.PersistentProperty; @@ -41,9 +42,9 @@ public class PersistentEntitiesResourceMappings implements ResourceMappings { private final SearchResourceMappings searchResourceMappings = new SearchResourceMappings( Collections. emptyList()); - private final Map, ResourceMetadata> cache = new ConcurrentReferenceHashMap<>(); - private final Map, MappingResourceMetadata> mappingCache = new ConcurrentReferenceHashMap<>(); - private final Map, ResourceMapping> propertyCache = new ConcurrentReferenceHashMap, ResourceMapping>(); + private final Map, ResourceMetadata> cache = new ConcurrentHashMap<>(); + private final Map, MappingResourceMetadata> mappingCache = new ConcurrentHashMap<>(); + private final Map, ResourceMapping> propertyCache = new ConcurrentHashMap, ResourceMapping>(); /** * Creates a new {@link PersistentEntitiesResourceMappings} from the given {@link PersistentEntities}.