2011-08-13 23 views
11

Chúng ta có thể thấy rằng "phantom thể truy cập" là như unreachable là "unreachable": §Tại sao các Tham chiếu Phantom không bị xóa khi chúng được enqueued?

Một đối tượng là phantom thể truy cập nếu nó không phải là mạnh mẽ, nhẹ nhàng, cũng không phải một cách yếu ớt có thể truy cập, nó đã được hoàn tất, và một số tham chiếu ảo đề cập đến nó.

Cuối cùng, một đối tượng là không thể truy cập và do đó đủ điều kiện để cải tạo, khi không thể truy cập được theo bất kỳ cách nào ở trên.

Bây giờ, từ: http://download.oracle.com/javase/6/docs/api/java/lang/ref/PhantomReference.html

Không giống như các tài liệu tham khảo mềm và yếu, tài liệu tham khảo phantom không tự động xóa bởi các nhà sưu tập rác khi chúng được enqueued. Một đối tượng có thể truy cập thông qua các tham chiếu ảo sẽ vẫn như vậy cho đến khi tất cả các tham chiếu như vậy bị xóa hoặc bản thân chúng trở nên không thể truy cập được.

Lý do cơ bản là gì? Thậm chí có ai không?

Đây có phải là trường hợp điển hình khác của tính năng quấy rối Java API không?

+0

Báo cáo lỗi: https://bugs.openjdk.java.net/browse/JDK-8024421 – Pacerier

Trả lời

8

Tham chiếu mềm sẽ bị xóa khi được đưa vào vì các tham chiếu mềm chính sử dụng để cho phép lưu vào bộ nhớ lớn các đối tượng lớn và xóa tham chiếu mềm cho phép đối tượng được lưu trong bộ nhớ cache lớn được thu thập rác.

Các tham chiếu yếu sẽ bị xóa khi được đưa vào bởi vì việc sử dụng chính các tham chiếu yếu là cho phép một tham chiếu đối tượng mà không ngăn cản nó bị thu gom rác, vì vậy hãy xóa các tham chiếu ngay khi đối tượng được đẩy cho phép đối tượng là rác được thu thập.

Tham chiếu ảo không được xóa khi được nhúng do một trường hợp sử dụng tham chiếu ảo là cho phép thực hiện dọn dẹp trước đối tượng là rác được thu thập. Bằng cách không xóa các tham chiếu, đối tượng vẫn có thể truy cập ảo (và không đủ điều kiện để thu thập rác) cho đến sau khi PhantomReference cho đối tượng đó bị xóa bởi người dùng, hoặc PhantomReference chính là rác được thu thập.

này được giải thích here,

Một đối tượng là phantom thể truy cập nếu nó không phải là dự mạnh mẽ, nhẹ nhàng, cũng không phải một cách yếu ớt có thể truy cập, nó đã được hoàn tất, và một số tài liệu tham khảo phantom đề cập đến nó.

Cuối cùng, một đối tượng không thể truy cập được, và do đó đủ điều kiện để cải tạo, khi không thể truy cập được theo bất kỳ cách nào ở trên.

+1

cảm ơn câu trả lời. Bạn có biết về trường hợp sử dụng các tham chiếu ma trận được sử dụng không? – dsatish

+4

Nếu một tham chiếu ma trận đã được tạo ra cho một đối tượng nhưng không có tham chiếu nào khác đến nó tồn tại, bởi điều gì có nghĩa là một tham chiếu có thể truy cập tới đối tượng đã từng tồn tại? Và nếu không có tài liệu tham khảo có thể truy cập nào có thể tồn tại, tại sao không nên thu thập đối tượng? – supercat

+0

@sbridges, ** Trích dẫn cần thiết ** cho "* một trường hợp sử dụng tham chiếu ảo là cho phép thực hiện dọn dẹp trước khi một đối tượng được thu thập rác *". Kiểm tra sự thật: Có ** không có trường hợp sử dụng như vậy **.Thật vậy, làm thế nào nó sẽ ngay cả vấn đề nếu dọn dẹp được thực hiện trước hoặc sau khi "tham khảo" có sẵn khi "tham khảo" là [không thể phát hiện] (http://archive.is/XhNht#selection-1531.227-1531.247)? – Pacerier

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