Trước đây tôi đi đến kết luận rằng nếu bạn cần một SoftReference với giá trị bằng (equals) dựa trên bình đẳng thì có một thiết kế xấu, ngoại trừ một interner từ này. Theo dõi Bộ sưu tập của Google và Guava không bao gồm một lớp học như vậy. Nhưng tôi đã đi qua một vấn đề mà tôi nghĩ rằng có thể sử dụng một đối tượng như vậy.Sử dụng tiềm năng cho SoftReference với giá trị (bằng) bình đẳng
Chúng tôi có một hệ thống quản lý tài sản trong một hiệu ứng hình ảnh kết xuất trang trại với 100 quy trình chạy cùng một công việc chỉ khác nhau về số khung mà nó hiển thị. Chúng tôi có một cơ sở dữ liệu Oracle cần ghi lại tất cả các tài sản được sử dụng. Thay vì đập Oracle với chèn giống hệt nhau, nơi chỉ có một sẽ thành công từ tất cả các công việc, trong hệ thống quản lý tài sản tầng giữa chúng ta có thể sử dụng một HashSet để ghi lại nếu đối tượng sẽ được chèn vào Oracle.
Tôi có thể sử dụng Google MapMaker với thời gian hết hạn, nhưng tôi không muốn phải lo lắng về việc hết hạn chính xác, chúng tôi có hiển thị chạy hàng giờ và vài ngày qua. Sử dụng SoftReference với âm thanh bình đẳng như một cách tốt hơn nhiều để JVM sẽ tự động quản lý việc thu gom rác. Đối với các vấn đề khác mà tôi muốn giải quyết bằng ConcurrentHashMap với bộ sưu tập rác, tôi sẽ sử dụng tham chiếu mạnh mẽ trong HashMap làm khóa để lấy equals() equality và SoftReference làm giá trị để JVM có thể thu thập thứ gì đó , nhưng trong trường hợp này, giá trị không quan trọng và tôi không có giá trị để bọc trong SoftReference để đặt ở đó. Vì vậy, nó có vẻ như sử dụng một SoftReference với bằng() sẽ làm các trick.
Bất kỳ đề xuất nào khác về điều này?
Yêu câu hỏi của bạn, tôi đã tự hỏi về điều đó cũng gần đây – nanda
Không 'ResourceBundle' làm điều gì đó như thế này? –
@nanda những gì được thêm vào Oracle là một danh sách các tài sản (nói tên tập tin trên một máy chủ NFS) được tạo động; ResourceBundle có vẻ không phù hợp. Tôi chỉ cần một HashSet để ghi lại rằng tên tập tin đã được ghi lại trong Oracle do đó, 99 lần thử chèn nó không lãng phí các chu kỳ CPU trong Oracle. –