
Ich verwende ehcache (3.8.0) mit Java (1.8.0_222), um Werte auf dem Heap zu speichern, die aus einer SQL-Datenbank abgerufen werden. Mein Problem ist, dass die gespeicherten Werte Listen von Objekten sind und diese Objekte ebenfalls Listen enthalten. Mit der Zeit scheinen die Referenzen in diesen innersten Listen null zu werden. Ich habe erfolglos versucht, es in einem kleineren Programm neu zu erstellen. Ich gehe also davon aus, dass es sich eher um etwas Dummes handelt, das ich übersehen habe, als um ein Problem mit ehcache.
Der Code, den ich zum Einrichten des Caches verwende, ist
final long cacheSize = 1L;
final MemoryUnit cacheUnits = MemoryUnit.GB;
ResourcePoolsBuilder resourcePools = ResourcePoolsBuilder
.newResourcePoolsBuilder()
.heap(cacheSize, cacheUnits);
CacheConfigurationBuilder<Key, List<MyInterface>> cacheConfigurationBuilder = CacheConfigurationBuilder
.newCacheConfigurationBuilder(Key.class, (Class<List<MyInterface>>)(Class<?>)List.class, resourcePools)
.withSizeOfMaxObjectGraph(Long.MAX_VALUE);
cacheManager = CacheManagerBuilder
.newCacheManagerBuilder()
.withCache(cachesName, cacheConfigurationBuilder)
.build();
cacheManager.init();
cache = cacheManager.createCache(cacheName, cacheConfigurationBuilder);
Antwort1
Das Problem wurde gelöst. Es stellte sich heraus, dass die gespeicherten Objekte nicht unveränderlich sind, wenn Sie den Heap verwenden. Was also passierte, war, dass das Programm ein Objekt aus dem Cache holte, einige seiner Felder löschte, als es damit fertig war, und als es das Objekt später holte, waren diese Felder immer noch gelöscht.