Tôi đang cố gắng tìm ra số mà bạn chỉ định trong biểu tượng Guava CacheBuilder maximumSize() đại diện.Ổ đĩa ổi dung lượng tối đa Kích thước
Nói rằng tôi đã có một cái gì đó như thế này trong mã của tôi,
Cache<String, Object> programCache = CacheBuilder.newBuilder()
.maximumSize(1000)
.build();
Liệu 1000 mà tôi đã chỉ định như kích thước tối đa có nghĩa là tôi có thể có một ngàn mục khác nhau trong bộ nhớ cache trước khi nó bắt đầu đá ra LRU (bất kể kích thước vật thể có thể là gì)? Nếu đây là trường hợp, có giới hạn về kích thước của đối tượng không? Hoặc 1000 điều đó có nghĩa là tôi có 1000mb (MB đúng không?) Để làm việc và tôi có thể có nhiều đối tượng trong bộ đệm như tôi muốn lên đến 1000mb trước khi nó bắt đầu đá LRU?
Điều đó có nghĩa là bộ nhớ cache sẽ không bao giờ vượt quá 1.000 mục nhập. Do thiết kế nội bộ, nó có thể đuổi ra khỏi ngưỡng đó. Để loại bỏ dựa trên kích thước đối tượng ([weight] (https://github.com/google/guava/wiki/CachesExplained#size-based-eviction)) sử dụng 'Weigher' và' maximumWeight'. Mặc dù không được khuyến nghị, bạn có thể sử dụng [jamm] (https://github.com/jbellis/jamm) để ước tính kích thước thời gian chạy. –
Bạn có thể muốn xem qua Wiki của Google về cách chúng loại bỏ các mục trong bộ nhớ cache. Cụ thể cho câu hỏi của bạn, hãy xem [Gỡ bỏ dựa trên kích thước] (https://code.google.com/p/guava-libraries/wiki/CachesExplained#Size-based_Eviction). Tôi nghĩ rằng dòng này là thú vị - ** Cảnh báo: bộ nhớ cache có thể loại bỏ các mục trước khi vượt quá giới hạn này - thường là khi kích thước bộ nhớ cache đang đạt đến giới hạn **. – afrin216
Không có giới hạn về kích thước của đối tượng. (Thậm chí cố gắng đo kích thước của các đối tượng Java theo byte là một nỗ lực tốn kém, khó hiểu, phụ thuộc vào nền tảng và dễ bị lỗi). –