Если создать мапу, добавить миллион значений, затем удалить все элементы и вызвать GC — вернётся ли память к исходному значению?

В Go, если создать мапу с миллионом элементов, затем удалить все элементы и вызвать сборщик мусора (GC), память не обязательно вернётся к исходному значению сразу.

Короткий ответ

Что ответить на собеседовании

В Go, если создать мапу с миллионом элементов, затем удалить все элементы и вызвать сборщик мусора (GC), память не обязательно вернётся к исходному значению сразу.

Подробный разбор

Ответ с пояснениями

В Go, если создать мапу с миллионом элементов, затем удалить все элементы и вызвать сборщик мусора (GC), память не обязательно вернётся к исходному значению сразу.

Причины:

  • Мапа внутри использует хэш-таблицу с выделенным буфером. При удалении элементов структура остаётся того же размера, но элементы становятся nil.
  • GC освободит память, занятую значениями, но сама структура мапы (хэш-таблица) остаётся выделенной.
  • Для уменьшения занимаемой памяти можно создать новую мапу и скопировать туда нужные элементы, либо присвоить nil старой мапе, чтобы GC мог освободить всю память.

Таким образом, просто очистка мапы и вызов GC не гарантирует возврат памяти к исходному уровню.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее