Trong Thư viện ổi, tôi nhầm lẫn về lý do tại sao Cache.asMap()
không nhất quán với Cache.size()
, trừ khi Cache.cleanUp()
được gọi.Tại sao Cache.asMap() không phù hợp với Cache.size()?
Cache<Object, Object> cache = CacheBuilder.newBuilder()
.expireAfterWrite(1, TimeUnit.SECONDS)
.build();
cache.get(...);
...
//After some seconds, all entries are expired.
//cache.asMap() is EMPTY Map, but cache.size() != 0
Vì vậy, câu hỏi của tôi: Có lỗi Cache.asMap()
là không phù hợp để Cache.size()
? Mặc dù tôi nhận thấy sự javadoc của Cache.size()
là:
/**
* Returns the **approximate** number of entries in this cache.
*/
Tôi chỉ có thể đoán nó liên quan đến một môi trường đồng thời. Và những gì hiện Cache.cleanUp()
làm chính xác?
Cảm ơn bạn, Charles! Tôi đã đi qua mã nguồn gần, 'size()' chỉ tính tổng của Segment, như bạn đã đề cập- "ngớ ngẩn để đi qua toàn bộ bộ nhớ cache chỉ để có được một ước tính kích thước chính xác hơn" :) Thiết kế tinh vi! –