2012-08-10 43 views
8

Trong Java có cấu trúc dữ liệu được gọi là WeakHashMap lưu trữ các tham chiếu yếu dưới dạng khóa. Bất cứ khi nào các tham chiếu yếu được lấy ra khỏi bộ nhớ, mục nhập sẽ bị xóa khỏi bản đồ.Java: Ngăn xếp với tham chiếu yếu

Nếu tôi có cấu trúc dữ liệu như Ngăn xếp hoặc Tập hợp nơi tôi lưu trữ các tham chiếu yếu, các mục nhập của chúng có bị xóa tự động khi tham chiếu yếu được lấy ra khỏi bộ nhớ không?

Dưới đây là ví dụ về Ngăn xếp lưu trữ các tham chiếu yếu.

Stack<WeakReference<Object>> objStack = new Stack<WeakReference<Object>>(); 
+0

Uh, vâng ... ... – esej

+0

Bạn có chắc chắn rằng nó sẽ không trả lại giá trị null không? – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

+1

Nếu bạn đang nghĩ đến việc sử dụng các tham chiếu yếu cho một ứng dụng thực, xin vui lòng ** đừng làm điều đó **! Những người xây dựng thư viện cốt lõi hối tiếc khi thêm họ vì họ không cung cấp bất kỳ lợi ích nào. Xem [bản trình bày] này (http://www.infoq.com/presentations/Extreme-Performance-Java) nếu bạn quan tâm. – Augusto

Trả lời

2

Có. Những gì bạn mô tả là một tài sản của tài liệu tham khảo yếu nói chung, không phải là WeakHashMap cụ thể.

Từ the API:

Giả sử rằng các bộ thu rác xác định tại một thời điểm nào đó trong thời gian đó một đối tượng là một cách yếu ớt thể truy cập. Vào thời điểm đó, nó sẽ xóa sạch tất cả các tham chiếu yếu đến đối tượng đó ...

+0

Vì vậy, nếu bạn có một LinkedList của WeakReferences và một trong những WeakReferences ở giữa danh sách hết bộ nhớ, LinkedList của bạn sẽ hoạt động như mong đợi? – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

+0

Tôi không chắc chắn làm thế nào để trả lời rằng ... nó phụ thuộc vào những gì bạn cho là "như mong đợi." – Pops

+0

Tôi nghĩ rằng những gì tôi không hiểu là khi bạn gọi .get() trên một WeakReference nó nhận được đối tượng thực tế. Các WeakReference không bao giờ được thiết lập để null chỉ là đối tượng nó trỏ đến. – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

Các vấn đề liên quan