là có thể trong Java để tạo tham chiếu yếu có đối tượng chỉ có thể được gửi tới bộ thu gom rác nếu điều kiện được chỉ định trả về true
?Tham chiếu yếu với điều kiện/thời gian chờ
Hãy nói rằng tôi có một cái gì đó giống như một bộ nhớ cache mà bản đồ số ID để một số dữ liệu:
Map<Integer, SomeData> cache = new HashMap<>();
SomeData
có hai phương pháp quan trọng - void updateTime()
, mà chỉ đặt một biến nội bộ để thời gian hiện tại, và boolean canBeDeleted()
, mà kiểm tra xem đối tượng có hoặc chưa được sử dụng trong 10 phút qua (chỉ đơn giản bằng cách so sánh thời gian hiện tại và thời gian đã lưu cộng với 10 phút). Nếu nó không được sử dụng trong khoảng thời gian nhất định này, phương thức trả về true
và đối tượng có thể bị xóa khỏi bộ nhớ cache ...
Tuy nhiên, khi tạo bộ nhớ cache có tham chiếu yếu thay vì mạnh:
Map<Integer, WeakReference<SomeData>> cache = new HashMap<>();
Sau đó, chỉ điều WeakReference
kiểm tra có lẽ là tài liệu tham khảo mạnh càng tốt để các đối tượng, nhưng tôi muốn nếu nó cũng kiểm tra tình trạng của tôi canBeDeleted()
và không loại bỏ các tài liệu tham khảo nếu nó trở false
. Có cách nào để làm điều này?
(Trên hết, có rò rỉ bộ nhớ và tôi không biết cách giải quyết nó ... Khi đối tượng bên trong WeakReference bị xóa, bản đồ vẫn chứa cặp khóa/giá trị không cần thiết).
Xin cảm ơn trước.
Nếu bạn nhìn vào [ 'ổi caches'] (http://code.google.com/p/guava-libraries/wiki/CachesExplained), bạn có thể tạo một trong đó tự động xóa các mục không được tham chiếu trong một thời gian nhất định. – Keppil
Đối với sự cố trong "()": bạn vẫn phải dọn dẹp bản đồ của mình. Việc xóa ứng dụng khách của WeakRef sẽ không tự động xóa mục nhập bản đồ. – Fildor