Назад к вопросам
СБЕР Тех
Junior — Middle
103
Какой объем памяти освобождается при вызове метода clear у списка, содержащего 1 миллион объектов типа Integer, занимающего 48 Мб памяти?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
При вызове метода clear() у списка в Java удаляются все ссылки на объекты, хранящиеся в списке, то есть элементы списка становятся недоступными для дальнейшего использования через этот список.
Однако сам список (например, ArrayList) освобождает память только для внутреннего массива ссылок, а не для самих объектов Integer. Объекты Integer остаются в памяти до тех пор, пока на них существуют ссылки где-либо еще.
Если список содержал 1 миллион объектов Integer и занимал 48 Мб, то после вызова clear():
- Внутренний массив ссылок очищается (ссылки обнуляются), что освобождает память, занимаемую этими ссылками (примерно несколько мегабайт, зависит от реализации).
- Объекты
Integerстановятся доступными для сборщика мусора, если на них нет других ссылок.
Таким образом, вызов clear() освобождает память, занимаемую внутренними структурами списка и позволяет сборщику мусора освободить память, занятую объектами, если они не используются больше нигде.
Пример:
List<Integer> list = new ArrayList<>();
// добавляем 1_000_000 элементов
for (int i = 0; i < 1_000_000; i++) {
list.add(i);
}
// занимаемая память примерно 48 Мб
list.clear(); // ссылки на объекты удалены
// объекты Integer могут быть удалены сборщиком мусора