Vấn đề chính với bộ nhớ cache lớn là thời gian GC đầy đủ. Để cung cấp cho bạn một ý tưởng nó có thể là 1 giây cho mỗi GB (Điều này thay đổi từ ứng dụng đến ứng dụng) Nếu bạn có một bộ nhớ cache 20 GB và ứng dụng của bạn tạm dừng trong 20 giây, thường xuyên như vậy là chấp nhận được?
Là một fan hâm mộ của các tập tin ánh xạ trực tiếp và bộ nhớ tôi có xu hướng suy nghĩ về khi nào tôi không phải cả hai để đưa dữ liệu ra heap, và chỉ sử dụng heap cho đơn giản. ;) Các tệp được ánh xạ bộ nhớ không có ảnh hưởng đến thời gian GC đầy đủ bất kể kích thước.
Một trong những ưu điểm của việc sử dụng tệp ánh xạ bộ nhớ là nó có thể lớn hơn nhiều so với bộ nhớ vật lý của bạn và vẫn hoạt động khá tốt. Điều này rời khỏi hệ điều hành để xác định phần nào cần phải có trong bộ nhớ và những gì cần phải được flushed vào đĩa.
BTW: Có ổ SSD nhanh hơn cũng hữu ích;) Các ổ đĩa lớn hơn cũng có xu hướng nhanh hơn. Kiểm tra các IOP mà họ có thể thực hiện.
Trong ví dụ này, tôi tạo bộ nhớ tệp 8 TB được ánh xạ trên máy có 16 GB. http://vanillajava.blogspot.com/2011/12/using-memory-mapped-file-for-huge.html
Lưu ý, nó hoạt động tốt hơn trong ví dụ tệp 80 GB, 8 TB có khả năng bị xóa quá mức. ;)
Nguồn
2012-01-20 07:52:18
Câu trả lời cho câu hỏi của bạn phụ thuộc nhiều hơn vào đặc điểm sử dụng bộ nhớ cache so với kích thước bộ nhớ cache. Ví dụ, tỷ lệ đọc/ghi, TTL, kích thước của các đối tượng bạn đang lưu trữ, số lượng đối tượng bạn có thể lưu trữ. Ngoài ra, câu hỏi của bạn là đặt một câu hỏi khá mờ. Bạn sẽ xem xét "quá lâu?" hoặc "Sẵn sàng cho thời gian chính?" Bạn phải biết loại SLA nào bạn cần trước khi bạn thực sự có thể đánh giá bất kỳ giải pháp lưu trữ bộ nhớ đệm nào. Thời gian phản hồi tối đa trong ms và SLA đạt tỷ lệ phần trăm. – allingeek