From 34ab20e8d71e1243dd15ad9a1776d9a7a4bd5be9 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 5e5b262ae..18f6810d2 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 @@ -20,6 +20,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; @@ -40,9 +41,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}.