IT заметки по программированию
IT заметки по программированию
IT заметки по программированию
IT заметки по программированию

Как работает garbage collector в golang

Как работает Garbage Collector (GC) в Go?

Garbage Collector (GC) в Go управляет памятью автоматически, очищая объекты, которые больше не используются. Он работает асинхронно и инкрементально, минимизируя задержки.


Основные принципы работы GC в Go

  1. Трассировка (Tracing GC)

    • Go использует «mark-and-sweep»:
      1. Mark (Пометка) – находит живые объекты, начиная с корневых (stack, heap, global variables).
      2. Sweep (Сборка) – освобождает неиспользуемые объекты.
  2. Три поколения объектов

    • «Young» – недавно созданные объекты.
    • «Mature» – часто используемые.
    • «Old» – долгоживущие объекты, проверяются реже.
  3. Параллельная работа (Concurrent GC)

    • GC работает в фоне, не останавливая всю программу.
  4. Stop-the-world (STW) фаза

    • Короткая пауза, когда Go приостанавливает выполнение всех горутин, чтобы отметить активные объекты.
    • Оптимизирована, чтобы занимать <1мс в современных версиях Go.

Как GC освобождает память?

  1. Если объект не имеет ссылок – он собирается GC.
  2. Stack-allocated объекты очищаются автоматически.
  3. Heap-allocated объекты освобождаются GC.
  4. Если структура содержит слайс, мапу или канал – они тоже участвуют в GC.

Пример работы GC в Go

Оптимизация работы GC

Используйте sync.Pool – для повторного использования объектов.
Минимизируйте выделение памяти – избегайте ненужных аллокаций.
Следите за утечками памяти – не храните ненужные ссылки.
Профилируйте GC (pprof) – чтобы находить узкие места.


Вывод

  • GC в Go – это конкурентный, инкрементальный, stop-the-world garbage collector.
  • Работает в фоне и с минимальными паузами.
  • Автоматически очищает память, но требует оптимального использования ресурсов.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *