ehcache に値として保存されたオブジェクト内の参照が消える

ehcache に値として保存されたオブジェクト内の参照が消える

私は、SQL データベースから取得した値をヒープに保存するために、Java (1.8.0_222) で ehcache (3.8.0) を使用しています。問題は、保存されている値がオブジェクトのリストであり、それらのオブジェクトにもリストが含まれており、時間の経過とともに、それらの最も内側のリストの参照が null になっているように見えることです。小さなプログラムでこれを再現しようとしましたが、うまくいきませんでした。これは 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

問題を解決しました。ヒープを使用すると、保存されたオブジェクトは不変ではないことがわかりました。つまり、プログラムはキャッシュからオブジェクトを取得し、処理が終わったらフィールドの一部をクリアし、その後オブジェクトを取得したときにそれらのフィールドがまだクリアされていたのです。

関連情報