2012-03-29 37 views
7

Phiên bản mới nhất của thư viện Guava tuyệt vời đã cập nhật apis bộ nhớ đệm. CacheBuilder bây giờ có một phương thức maxmimumWeight() để thực thi trọng số tối đa trên cache. Trạng thái javadoc:Bộ nhớ cache của ổi có xem trọng lượng trong các lựa chọn trục xuất không?

Chỉ định khối lượng tối đa của các mục mà bộ nhớ cache có thể chứa. Trọng lượng được xác định bằng cách sử dụng Trọng lượng được chỉ định bằng cân và sử dụng phương pháp này yêu cầu cuộc gọi tương ứng với cân trước khi gọi build (com.google.common.cache.CacheLoader).

Lưu ý rằng bộ nhớ cache có thể loại bỏ mục nhập trước khi vượt quá giới hạn này. Khi kích thước bộ nhớ cache tăng gần với mức tối đa, bộ nhớ cache sẽ hiển thị các mục ít có khả năng được sử dụng lại. Ví dụ: bộ nhớ cache có thể xóa mục nhập vì nó chưa được sử dụng gần đây hoặc rất thường xuyên.

Khi bộ nhớ cache cần loại bỏ mục nhập, liệu nó có cân nhắc trọng số không? Ví dụ, có thể tốt hơn để giữ một số mục có trọng lượng nhỏ hơn một mục trọng lượng lớn, nếu mục trọng lượng lớn được sử dụng thường xuyên hơn bất kỳ vật phẩm nhỏ nào, nhưng ít thường xuyên hơn tất cả các vật phẩm nhỏ lại với nhau.

+1

Các tài liệu hiện nói "Lưu ý rằng trọng lượng chỉ được sử dụng để xác định xem bộ nhớ cache có vượt quá dung lượng hay không; nó không có tác dụng khi chọn mục nhập nào sẽ được gỡ bỏ tiếp theo". http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/cache/CacheBuilder.html#maximumSize(long) –

Trả lời

12

Thành viên nhóm ổi tại đây.

Khi kích thước bộ nhớ cache tăng gần với mức tối đa, bộ nhớ cache sẽ loại bỏ các mục nhập ít có khả năng được sử dụng lại. Ví dụ: bộ nhớ cache có thể loại bỏ mục nhập vì nó không được sử dụng gần đây hoặc rất thường xuyên.

Nếu bộ nhớ cache có bất kỳ hành vi nào khác, nó không được ghi lại (và không nên dựa vào). Điều đó nói rằng, việc thực hiện hiện chỉ quan tâm về gần đây nhất truy cập, nếu bạn nhìn vào the source:

while (totalWeight > maxSegmentWeight) { 
    ReferenceEntry<K, V> e = getNextEvictable(); 
    if (!removeEntry(e, e.getHash(), RemovalCause.SIZE)) { 
    throw new AssertionError(); 
    } 
} 

getNextEvictable lặp theo thứ tự gần đây ít truy cập.

Các vấn đề liên quan