Instance, phần tử mảng
Nếu có một tham chiếu đến một đối tượng, nó có thể không được thu gom rác thải. Đặc biệt là nếu đối tượng đó (và toàn bộ đồ thị phía sau nó) lớn, chỉ có một tham chiếu dừng thu gom rác, và tham chiếu đó không thực sự cần thiết nữa, đó là một tình huống không may.
Trường hợp bệnh lý là đối tượng duy trì một thể hiện đơn nhất đối với toàn bộ cây DOM XML được sử dụng để định cấu hình nó, MBean chưa được đăng ký hoặc tham chiếu đơn lẻ đến đối tượng từ ứng dụng web chưa được xử lý ngăn chặn toàn bộ trình nạp lớp không bị tải xuống.
Vì vậy, trừ khi bạn chắc chắn rằng đối tượng giữ tham chiếu chính nó sẽ được thu thập rác anyway (hoặc thậm chí sau đó), bạn nên null ra tất cả mọi thứ mà bạn không còn cần.
biến Scoped:
Nếu bạn đang xem xét thiết lập một biến địa phương để null trước khi kết thúc phạm vi của nó, vì vậy nó có thể được khai hoang bởi thu gom rác và để đánh dấu nó như là "không sử dụng được từ bây giờ ", bạn nên xem xét đặt nó trong một phạm vi hạn chế hơn để thay thế.
{
BigObject obj = ...
doSomethingWith(obj);
obj = null; // <-- explicitly set to null
doSomethingElse();
}
trở thành
{
{
BigObject obj = ...
doSomethingWith(obj);
} // <-- obj goes out of scope
doSomethingElse();
}
Long, phạm vi phẳng nói chung là xấu đối với mức độ dễ đọc của mã, quá. Giới thiệu các phương pháp riêng để phá vỡ mọi thứ chỉ vì mục đích đó không phải là chưa từng nghe thấy.
Tiểu sử. Trên thời gian chạy hiện đại, bạn sẽ không thấy bất kỳ sự gia tăng đáng kể nào về hiệu suất hoặc dung lượng bộ nhớ. –
@Jason, Tiểu sử? Điều đó giả định rằng tôi sẽ lập hồ sơ một bộ đủ lớn các trường hợp để có được một kết quả đủ tốt để trả lời câu hỏi này. Và tôi không chọn một bộ các trường hợp VM được tối ưu hóa đủ để che giấu các vấn đề về hiệu suất và gc. Đó là lý do tại sao tôi hỏi điều này ở đây. Để hiểu được các trường hợp mà đây là vấn đề. – sal
Bản sao của http://stackoverflow.com/questions/449409/does-assigning-objects-to-null-in-java-impact-garbage-collection. –