Ответ
Сборка мусора (GC) — процесс освобождения памяти, занятой объектами, которые больше не достижимы из работающего кода (корневых ссылок). Основные фазы большинства сборщиков:
- Mark (Пометка): GC начинает с корней GC (Garbage Collection Roots), таких как статические поля, локальные переменные в активных методах, потоки и т.д., и рекурсивно помечает все достижимые объекты как "живые".
- Sweep (Очистка): Память сканируется, и объекты, не помеченные как живые, считаются мусором и подлежат удалению.
- Compact (Уплотнение) (опционально): Живые объекты перемещаются в начало области памяти, чтобы устранить фрагментацию и выделять память для новых объектов быстрее.
Ключевое воздействие на приложение: Большинство алгоритмов GC требуют остановки всех потоков приложения (Stop-The-World пауза) на время выполнения некоторых или всех фаз. Длительность паузы зависит от алгоритма и размера кучи.
Пример запроса GC (не гарантирует немедленный вызов):
// Создание мусора
List<Object> list = new ArrayList<>();
for (int i = 0; i < 100_000; i++) {
list.add(new Object());
}
list = null; // Объекты становятся недостижимыми
System.gc(); // Подсказка JVM, что можно выполнить сборку
Типы сборщиков: Различаются стратегиями минимизации пауз (например, G1 и ZGC предназначены для больших куч с предсказуемыми короткими паузами).