Tôi cần kết hợp một số dữ liệu với khóa cho toàn bộ thời gian của nó, vì vậy tôi đang sử dụng WeakHashMap
. Tuy nhiên, ngoài ra tôi cần phải có được một khóa bằng giá trị tương ứng của nó. Cách đơn giản để làm điều đó là để giữ cho tài liệu tham khảo khi tạo một giá trị:Mục nhập WeakHashMap có được thu thập nếu giá trị chứa tham chiếu mạnh duy nhất cho khóa không?
public class Key {}
public class Value {
final public Key key;
public Value(Key k) {
key = k;
}
}
Tất nhiên, khi tôi sử dụng Value
trong chương trình của tôi, key
của nó sẽ không biến mất. Tuy nhiên, nếu không có thêm tham chiếu đến một trong hai khóa hoặc giá trị của nó bên ngoài bản đồ, nó sẽ là rác được thu thập? Hay tham chiếu mạnh mẽ còn sống sót trong giá trị có ngăn cản nó không?
+1 Có lẽ tôi đã đọc tài liệu trước. :) – biziclop
@biziclop Cũng từ Javadoc: Một cách để giải quyết vấn đề này là tự bọc các giá trị trong WeakReferences trước khi chèn, như sau: m.put (key, new WeakReference (value)), và sau đó unwrapping khi nhận được. Điều đó sẽ thực hiện thủ thuật! – laguille
Hoặc chỉ lưu trữ một tham chiếu yếu đến khóa trong đối tượng giá trị của bạn. Bởi vì nếu bạn quấn giá trị trong một WR, bạn có thể kết thúc với một khóa hiện có với giá trị alraedy thu thập được. – biziclop