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