powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как освободить память из под объекта внутри функции.
11 сообщений из 11, страница 1 из 1
Как освободить память из под объекта внутри функции.
    #37731063
justcoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Представьте себе такую ситуацию, есть функция

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public void f(){
 Map map=new HashMap<String,String>();
 while (условие){
 //Наполняю мапу
  if (условие){
    //вот тут у меня размер мапы очень большой и данные котрые в ней -я проработал они мне не нужны, но
    //Сама мапа нужна. Я хочу освободить ресурсы и пишу
    map=new HashMap<String,String>();
  }
 else{
   //Наполняю мапу
 }
 }
}



Собственно корректно ли я освобождаю память из-под мапы или нужно так:
Код: java
1.
2.
map=null;
map=new HashMap<String,String>();



В общем как корректно будет?
...
Рейтинг: 0 / 0
Как освободить память из под объекта внутри функции.
    #37731072
DDiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно спокойно и без null обойтись
...
Рейтинг: 0 / 0
Как освободить память из под объекта внутри функции.
    #37731084
DDiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл что тут редактировать сообщения нельзя :)
Когда вы делаете
Код: java
1.
map=new HashMap<String,String>();

, если вы больше ни не наплодили ссылок на этот HashMap, то на объект(старый HashMap) больше ничто не указывает и GC может спокойно его "стырить".
...
Рейтинг: 0 / 0
Как освободить память из под объекта внутри функции.
    #37731231
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
if (условие) {
  map.clear();
}
...
Рейтинг: 0 / 0
Как освободить память из под объекта внутри функции.
    #37731339
DDiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grasoff.net,

читал что это просто очистит мапу, но никак не освободит память!?
т.е. если там было стотыщмильёнов элементов, они так там и будут там но будут null
вот так делает HashMap
Код: java
1.
2.
3.
4.
5.
6.
7.
public void clear() {
        modCount++;
        Entry[] tab = table;
        for (int i = 0; i < tab.length; i++)
            tab[i] = null;
        size = 0;
}


если там было 1кк записей то получается лишняя трата времени на проход по Entry и их null'ение.
быстрее просто "похерить" ссылку

или я ошибаюсь? не силён в теории :(
...
Рейтинг: 0 / 0
Как освободить память из под объекта внутри функции.
    #37731369
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DDiverили я ошибаюсь? не силён в теории :(
Не ошибаетесь. Проще создать новый HashMap.
...
Рейтинг: 0 / 0
Как освободить память из под объекта внутри функции.
    #37731373
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczDDiverили я ошибаюсь? не силён в теории :(
Не ошибаетесь. Проще создать новый HashMap.
И быстрее во всех отношениях.
...
Рейтинг: 0 / 0
Как освободить память из под объекта внутри функции.
    #37731385
Valery Shiskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DDiver,

GC будет смотреть не только на то, есть ли ссылки на map, но и есть ли ссылки на его элементы и, соответственно память освобождается по-элементно. Т.е. трудно, не зная подробностей работы GC, определить какой метод эффективней
...
Рейтинг: 0 / 0
Как освободить память из под объекта внутри функции.
    #37731401
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DDiverесли там было 1кк записей то получается лишняя трата времени на проход по Entry и их null'ениетак-то это копейки. даже не копейки )

а вот new HashMap() создаст новый объект, при добавлении в который будут вызываться более тяжелые операции по увеличиванию внутреннего массива
...
Рейтинг: 0 / 0
Как освободить память из под объекта внутри функции.
    #37731427
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery ShiskinDDiver,

GC будет смотреть не только на то, есть ли ссылки на map, но и есть ли ссылки на его элементы и, соответственно память освобождается по-элементно. Т.е. трудно, не зная подробностей работы GC, определить какой метод эффективней
Это не совсем там. Современные GC сканируют только живые объекты. Всё остальное прибивается охапкой. Поэтому на производительность GC чаще влияет количество живых объектов, а не количество удаляемых.
...
Рейтинг: 0 / 0
Как освободить память из под объекта внутри функции.
    #37731441
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grasoff.netа вот new HashMap() создаст новый объект, при добавлении в который будут вызываться более тяжелые операции по увеличиванию внутреннего массива
Так это отдельный разговор.
public HashMap(int initialCapacity, float loadFactor)
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как освободить память из под объекта внутри функции.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]