|
21 / 19 / 4
Регистрация: 05.06.2013
Сообщений: 190
|
||||||
Чистка ArrayList11.05.2014, 16:07. Показов 3759. Ответов 8
Метки нет (Все метки)
Часто возникает потребность удаления всех элементов ArrayList. Как правильнее(с наименьшей памятью на выходе) это осуществить?
0
|
||||||
| 11.05.2014, 16:07 | |
|
Ответы с готовыми решениями:
8
Для чего написано: ArrayList<person> people = new ArrayList<>();
|
|
ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ
|
||||||
| 11.05.2014, 16:29 | ||||||
|
1й вариант - самый плохой, в момент создания нового объекта (а ссылка еще не освобождена для GC) - можете попасть в недостаток памяти
2й вариант - получше будет, но старый объект будет сидеть до вызова GC (теоретически самый быстрый должен быть, но немного ресурсодержащий) 3й вариант будет выполнен за O(n), из плюсов - лишняя память не используется, из минусов - проход по всей коллекции (для простоты понимания вскроем пациента)
я бы лучше 2й юзал, если памяти не совсем кот наплакал и коллекции по 1кк элементов
0
|
||||||
|
12 / 12 / 2
Регистрация: 28.04.2014
Сообщений: 31
|
|
| 11.05.2014, 18:41 | |
|
tankomaz,
Вы не учитываете массу нюансов. Во-первых, с прикладной точки зрения разницы между первым и вторым вариантом нет вообще никакой. Если посмотреть на assembly код, то между обнулением и ссылки и присвоением ей нового объекта находится несколько десятков ассемблерных инструкций, суммарное время исполнения которых будет измеряться несколькими десятками наносекунд. Более того, если внимательно посмотреть на эти инструкции, то там особо некуда вставлять safepoint'ы GC, так как JIT агрессивно все инлайнит. Соответственно, вероятность, что GC сможет остановить поток после обнуления но до создания нового списка, стремится к нулю. Про мизерный размер пустого ArrayList я вообще молчу. Так что второй вариант вообще отбрасываем из-за его бессмысленности. Во-вторых, выбор между первым и третьим вариантом очень сильно зависит от того, как именно используется этот список. Если это какой-то короткоживущий объект не особо большого размера, то надо однозначно создавать новый ArrayList. Тем самым GC будет прибивать его young generation на минорных сборках. Если же мы будем делать его clear(), то ссылка постареет и перейдет в tenured, и над ней GC будет пыхтеть уже в процессе более тяжеловесной major collection. А вот если это долгоживущий объект, или если размер списка велик (тысячи, десятки тысяч объектов, и более), и после очистки он все равно будет расти до эти размеров, то надо однозначно чистить, а не пересоздавать. Тем самым мы сможем избежать ненужных аллокаций памяти по мере роста списка. Но не зная входных данных автора, это тоже является "нанооптимизацией", а которой не стоит думать, пока не появится повод.
1
|
|
|
21 / 19 / 4
Регистрация: 05.06.2013
Сообщений: 190
|
|
| 11.05.2014, 21:07 [ТС] | |
|
tankomaz, У меня почему-то возникает предположение, что 1й и 2й это абсолютно одно и то же.
0
|
|
|
ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ
|
|
| 11.05.2014, 21:14 | |
|
0
|
|
|
12 / 12 / 2
Регистрация: 28.04.2014
Сообщений: 31
|
|
| 11.05.2014, 22:26 | |
|
tankomaz,
Так я и написал - с практической точки зрения. Если у вас приложение не может аллоцировать очередной объект из-за нехватки памяти - ему конец. Если вы предварительно обнулите ссылку, то оттяните этот конец на несколько мгновений. На практике это бессмысленно. Собственно, поэтому такое и встречается в реальном коде крайне редко - когда надо прибить один огромный объект, создав вслед за ним еще один не менее огромный. Мы же создаем несчастный ArrayList(), который займет что-то около 100 байт.
0
|
|
|
237 / 236 / 72
Регистрация: 02.07.2013
Сообщений: 881
|
|
| 12.05.2014, 21:43 | |
|
0
|
|
|
12 / 12 / 2
Регистрация: 28.04.2014
Сообщений: 31
|
|
| 13.05.2014, 00:10 | |
|
Если бы это не было проблемой, у GC HotSpot не было бы нескольких десятков настроек.
0
|
|
| 13.05.2014, 00:10 | |
|
Помогаю со студенческими работами здесь
9
Обращение к элементам ArrayList, который в другом ArrayList Как представить элементы java.ArrayList содержащие другие java.ArrayList в виде XML - XSL? Аналоги java.util.ArrayList<java.util.ArrayList<Integer>> ArrayList
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать контроль заполнения реквизита табличной части. . .
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: при создании документов установить период списания автоматически. . .
|
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2.
Задача: вывести данные из ТЧ нетипового документа. . .
|
|
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению.
На форме документа создается. . .
|
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
|
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
|
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
|