Tôi rất tò mò muốn tìm hiểu cách các JVM mới nhất xử lý bộ nhớ thu gom rác được bảo lưu theo phương pháp sau.Phương thức liệt kê subList() có ngăn chặn việc thu gom rác trong phần còn lại của danh sách không?
public List<Player> getHallOfFame() {
ArrayList<Player> listToSort = new ArrayList<Player>(map.values());
Collections.sort(listToSort, comparator);
return listToSort.subList(0, 5);
}
Tại tồi tệ nhất tôi có thể tưởng tượng JVM giữ toàn bộ nội dung của listToSort
trong bộ nhớ chừng nào vẫn còn tham chiếu đến sublist. Có ai biết nếu đó thực sự là trường hợp? Tôi đặc biệt quan tâm đến các liên kết có thể chứng minh điều này theo cách này hay cách khác cho các JVM cụ thể.
Tôi nghĩ rằng .subList trả về một Danh sách mới và listToSort sẽ nằm ngoài phạm vi, vì vậy nó sẽ bị thu gom rác. –
@Paul: Tài liệu có quy định khác. –
Có, chìa khóa ở đây là nó được hỗ trợ bởi danh sách ban đầu vì vậy bất kỳ thay đổi trong danh sách ban đầu được phản ánh trong danh sách phụ. – CoolBeans