Sobes.tech
Back to questions
Senior
6

Что происходит с памятью при удалении элементов из map? Освобождаются ли бакеты при очистке map?

Companies where asked
техвил

Answer from AI

sobes.tech AI

В Go при удалении элементов из map с помощью функции delete удаляется ключ и связанное с ним значение, но внутренние структуры данных (бакеты) не освобождаются сразу. Это связано с тем, что map устроен на основе хеш-таблицы с бакетами, которые выделяются при создании map и могут расширяться при росте.

При очистке map (например, присваивании m = make(map[KeyType]ValueType)) старый map становится доступен для сборщика мусора, и вся память, включая бакеты, будет освобождена, если на неё больше нет ссылок.

Таким образом:

  • Удаление отдельных элементов не освобождает память бакетов.
  • Полная очистка map через создание нового объекта позволяет освободить всю память старого map.

Пример:

m := make(map[string]int)
m["a"] = 1
m["b"] = 2

// Удаляем элемент
delete(m, "a")

// Память бакетов остаётся выделенной

// Чтобы освободить память, создаём новый map
m = make(map[string]int)