Разрешает ли sublist (from, to) .clear () сбор мусора очищенной части ArrayList? - PullRequest
2 голосов
/ 07 сентября 2011

В Java при наличии некоторого непустого ArrayList редактирует

list.sublist(from,to).clear()

(измененный вопрос):

уменьшает внутренний размер ArrayList (т.е. пусть ArrayList потом будет использовать меньше памяти)?

Меня особенно интересует случай, когда from = 0, т.е. когда список очищается от начала до некоторого элемента.Работает ли trimToSize (), если from есть какой-либо индекс внутри списка (не только первый)?

Ответы [ 4 ]

4 голосов
/ 07 сентября 2011

"clear" - это перемещение объектов в базовом массиве (Object []), но оно не меняет размер массива.Если вы хотите уменьшить размер массива после удаления некоторых элементов в ArrayList, используйте метод trimToSize ().

Неиспользуемые ссылки на элементы массива устанавливаются в ноль, поэтому элементы могут быть собраны мусором.

2 голосов
/ 07 сентября 2011

Когда вы очищаете подсписок, это то же самое, что и удаление этих записей, так что все они могут быть GCed (если на них нет ссылок где-то еще)Не нужно беспокоиться о том, как и когда они будут очищены.Я не стал бы беспокоиться об этом, если вы не знаете, что у вас есть проблемы.В этом случае я бы использовал профилировщик памяти, чтобы определить, почему объекты сохраняются, когда вы думаете, что они не должны.

1 голос
/ 07 сентября 2011

Разрешает ли sublist (от, до) .clear () сборщик мусора очищенной части ArrayList?

Да, если вы получите подсписок и очистите его, вы удалите все элементы подсписка из исходного списка .

Другими словами, если список является единственным, хранящим ссылкик объектам объекты, которые вы удаляете, имеют право на сборку мусора.

Базовая демонстрация:

List<String> strings = new ArrayList<String>();
strings.add("one");
strings.add("two");
strings.add("three");
strings.add("four");

System.out.println(strings);   // prints [one, two, three, four]

strings.subList(1, 3).clear();

System.out.println(strings);   // prints [one, four]
0 голосов
/ 07 сентября 2011

Неиспользованный?Этот возвращенный список является ВИДОМ оригинала.Если вы измените один, изменения могут быть видны на другом.

...