儲存在 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

解決了問題。事實證明,如果您使用堆,則儲存的物件不是不可變的。所以發生的情況是,程式從快取中抓取一個對象,在完成處理後清除它的一些字段,然後當它稍後抓取該對象時,這些字段仍然被清除。

相關內容