ehcache 中存储为值的对象中的引用正在消失

ehcache 中存储为值的对象中的引用正在消失

我正在使用 ehcache (3.8.0) 和 Java (1.8.0_222) 将从 SQL 数据库检索的值存储在堆上。我遇到的问题是存储的值是对象列表,而这些对象也包含列表,随着时间的推移,这些最内层列表中的引用似乎变为空。我曾尝试在一个较小的程序中重新创建它,但没有成功,所以我猜这是我忽略了一些愚蠢的事情,而不是 ehcache 的问题。

我用于设置缓存的代码是

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);

答案1

问题解决了。事实证明,如果使用堆,存储的对象就不是不可变的。所以发生的事情是,程序从缓存中抓取一个对象,在用完后清除它的一些字段,然后当它稍后抓取该对象时,这些字段仍然被清除。

相关内容