2012-03-09 32 views
5

Khi một mảng các đối tượng không được tham chiếu nữa, các đối tượng trong mảng đó có được thu thập rác không? (Giả sử không biến được tham chiếu đến phần tử)Trong Java, làm thế nào là một mảng các đối tượng rác thu thập được?

Trong trang này, http://java.sys-con.com/node/37613 nó nói - "Mối nguy hiểm lớn nhất đang đặt một đối tượng vào một bộ sưu tập và quên để xoá bỏ nó Bộ nhớ sử dụng bởi đối tượng đó sẽ không bao giờ được khai hoang. . "

Nếu bạn chắc chắn hủy bỏ tham chiếu, tại sao bộ nhớ đó sẽ bị hủy?

Cảm ơn

+0

Vì nếu bạn không hủy kích hoạt tham chiếu, nó sẽ không được khai hoang. –

Trả lời

4

Khi một mảng của các đối tượng không được tham chiếu nữa, hiện các đối tượng trong mảng được thu gom rác thải quá? (giả sử không có biến nào là tham chiếu các phần tử)

Có.

"Mối nguy hiểm lớn nhất đang đặt một đối tượng vào một bộ sưu tập và quên để xoá bỏ nó. Bộ nhớ sử dụng bởi đối tượng đó sẽ không bao giờ được được tái sinh."

Đây là khi bạn giữ tham chiếu đến bộ sưu tập. Ví dụ: nếu bạn có một số Map, trong đó bạn đặt một khóa-giá trị và sau đó quên xóa, sau đó nó sẽ ở đó mãi mãi. Hãy suy nghĩ các phiên http, nếu bạn sử dụng một cái gì đó trong ServerContext hoặc một số ví dụ như vậy khi bắt đầu yêu cầu bằng cách sử dụng id phiên làm khóa nhưng không xóa nó ở cuối yêu cầu xử lý ..

2

Đối với câu hỏi đầu tiên, câu trả lời là có, tuyệt đối : các đối tượng bên trong mảng không được tham chiếu và không có tham chiếu nào khác thu gom rác.

Đối với câu hỏi thứ hai, các cuộc đàm phán tài liệu về cách đặt quên một đối tượng bên trong một bộ sưu tập tham chiếu, ví dụ như một bộ nhớ cache của một số loại, một lĩnh vực tĩnh, một cửa hàng thread-địa phương vv

1

Nó sẽ không được xác nhận nếu không có gì liên quan đến nó. Bài báo nói rằng nếu bạn vô hiệu hóa một tham chiếu, nhưng đối tượng vẫn còn trong một bộ sưu tập được tham chiếu (do đó được tham chiếu), nó sẽ không được thu thập.

1

Nói chung, mọi thứ không được tham chiếu là rác được thu thập. Vì vậy, có, những đối tượng sẽ được thu gom rác thải.

Ngoài ra, lưu ý rằng:

  1. Một mảng không phải là một bộ sưu tập.
  2. Tôi nghĩ rằng những gì người viết có nghĩa là đảm bảo rằng bạn nhớ tất cả những nơi bạn đang tham chiếu một đối tượng, để nếu bạn có ý định xóa nó, nó sẽ bị xóa (và không có). tham chiếu đến nó).
Các vấn đề liên quan