Vâng, tôi đã phát triển một ứng dụng java sử dụng một số mối quan hệ đối tượng làm cho việc sử dụng bộ nhớ quá đắt. Tôi không có kinh nghiệm quản lý bộ nhớ java vì thiết kế ứng dụng làm cho việc phá hủy các đối tượng trở nên khó khăn và sử dụng lại không gian đã bị xóa trước đó. Ví dụ, tôi đang sử dụng các mẫu Observer và MVC.Làm thế nào để tiêu diệt các đối tượng java?
Vì vậy, lý thuyết nói rằng ..
Một đối tượng trở nên đủ điều kiện để thu gom rác hoặc GC nếu nó không thể truy cập từ bất kỳ đề sống hay bất kỳ tài liệu tham khảo tĩnh
Nói cách khác bạn có thể nói rằng một đối tượng trở nên đủ điều kiện để thu thập rác nếu tất cả các tham chiếu của nó là null. Tuy nhiên, trong kinh nghiệm ngắn của tôi, quá khó để tôi phá hủy tất cả các tham chiếu từ các đối tượng mà tôi muốn xóa khỏi bộ nhớ (ví dụ: khi khung được đóng) khi bạn có kịch bản như của tôi, nơi bạn không Không biết có bao nhiêu tài liệu tham khảo cho các lớp của bạn tồn tại.
Theo ngữ cảnh này, làm thế nào tôi có thể đối phó với sự phá hủy đối tượng khi có nhiều tham chiếu đến nó? hoặc làm cách nào để quản lý bộ nhớ khi bạn có một tham chiếu phức tạp cho mỗi người khác?
Đã hiểu! nhưng ... làm thế nào tôi có thể cô lập một đối tượng khi nó có thể được thêm vào (ví dụ) trong mảng bội số? Đặt 'object = null' sẽ xóa tất cả các tham chiếu? – manix
@manix: không, nó sẽ không. mà sẽ chỉ null tham chiếu có tên 'object' trong phạm vi hiện tại. Bạn cần phải thực sự loại bỏ đối tượng này khỏi tất cả các danh sách này hoặc bất kỳ vùng chứa nào khác. – haylem
@halem Có phải danh sách nhiều mảng ngắn hay dài không? Nếu họ sống ngắn, thì không có vấn đề gì cả. Sau khi danh sách không còn có thể truy cập được nữa, bộ thu gom rác sẽ làm việc phép thuật của nó. OTH nếu danh sách mảng tồn tại lâu, thì tất cả các phần tử của nó sẽ có thể truy cập được trong suốt cuộc đời của nó trừ khi bạn làm điều gì đó. Tôi đề nghị arraylists sống ngắn. – emory