Сборщик мусора (Garbage Collector) - это часть среды выполнения (например, JVM, .NET CLR, Node.js), которая автоматически управляет памятью. Его основная задача - освобождать память, занятую объектами, которые более не используются программой.
Особенности:
- Автоматическое управление пямятью: Разгружает разработчика от ручного выделения и освобождения памяти (как в C++).
- Предотвращение утечек памяти: Автоматически удаляет объекты, на которые больше нет ссылок, что минимизирует риск утечек.
- Алгоритмы работы: Существуют различные алгоритмы сборки мусора (Mark and Sweep, Copying, Generational, G1 и др.), каждый со своими особенностями по производительности, задержкам и фрагментации памяти.
- Паузы (Stop-the-world): Некоторые алгоритмы GC требуют остановки выполнения всех потоков приложения на некоторое время для выполнения сборки мусора. Это может вызывать ощутимые задержки, особенно в отзывчивых приложениях.
- Настраиваемость: В большинстве сред выполнения есть возможность настраивать параметры GC (например, выбор алгоритма, размеры кучи) для оптимизации производительности.
- Поколения объектов (Generational Garbage Collection): Эффективность повышается путем разделения кучи на "поколения". Молодые объекты, скорее всего, станут мусором быстро, а старые - останутся надолго. GC чаще проверяет "молодое" поколение.
- Не детерминированность: Точное время, когда произойдет сборка мусора, как правило, не гарантировано. Это может затруднить низкоуровневую оптимизацию памяти в некоторых сценариях.