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