Nếu tài liệu tham khảo của tôi để obj1 đi ra khỏi phạm vi, nhưng tài liệu tham khảo của tôi để obj2 không không, là obj1 vẫn đủ điều kiện cho thu gom rác thải, hoặc là có một số vấn đề phụ thuộc bởi vì có vẫn còn là một tham chiếu đến đối tượng Danh sách ?
Nếu tôi hiểu bạn một cách chính xác bạn có nghĩa là cả hai obj1
và obj2
là loại List<string>
và cả điểm đến cùngList<string>
dụ.
Khi obj1
vượt quá phạm vi, sẽ vẫn còn obj2
làm tham chiếu hoạt động đối với phiên bản List<string>
, do đó danh sách không thể thu thập rác.
Nếu obj1 là một phần của kiểu tham chiếu trên đống (nghĩa là một trong các thuộc tính của nó), không gian bộ nhớ mà nó chiếm có thể là rác được thu thập như một phần của đối tượng bên ngoài. Nếu nó chỉ là một tham chiếu trên ngăn xếp, GC sẽ không được tham gia kể từ khi ngăn xếp sẽ chỉ được unwound vào cuối của cuộc gọi phương thức khi obj1 rơi ra khỏi phạm vi.
Hãy nhớ rằng obj1 chỉ là một tham chiếu (theo cách con trỏ) đến một đối tượng trên heap - đối tượng này có thể là rác chỉ được thu thập khi không có tham chiếu nào trỏ đến nó nữa.
+! Câu hỏi hay, nhưng bạn vui lòng viết nó ra trong mã? – harpo
Có vẻ như một câu hỏi hay, nhưng tôi không thực sự chắc chắn vì nó không rõ ràng những gì đang xảy ra với * obj1 *, * obj2 *, và các đối tượng Danh sách ... bạn có thể làm rõ? –
Matt