Сборка мусора в Java: как это работает и почему это важно
Что такое сборка мусора в Java?
Сборщик мусора (Garbage Collector, GC) в Java автоматически управляет памятью, освобождая разработчиков от ручного освобождения памяти. Когда у объекта не остается живых ссылок, GC возвращает его кучу (heap), предотвращая утечки памяти, которые могут привести к сбоям приложений.
В Java объекты создаются в куче с помощью оператора new. Среда выполнения отслеживает ссылки; когда последняя ссылка исчезает, объект становится пригодным для сбора. GC периодически запускается в фоновом режиме, делая ваш код проще и безопаснее.
В отличие от C, где требуется free(), Java устраняет риск висячих указателей и неопределенного поведения, повышая надежность и безопасность.
Все объекты в Java находятся в разделе памяти heap — области, которую сканирует GC.
Практический пример: наблюдение за GC в действии
Шаг 1 — Скопируйте код ниже в редактор:
class Student {
int a;
int b;
public void setData(int c, int d) {
a = c;
b = d;
}
public void showData() {
System.out.println("Value of a = " + a);
System.out.println("Value of b = " + b);
}
public static void main(String[] args) {
Student s1 = new Student();
Student s2 = new Student();
s1.setData(1, 2);
s2.setData(3, 4);
s1.showData();
s2.showData();
//Student s3;
//s3 = s2;
//s3.showData();
//s2 = null;
//s3.showData();
//s3 = null;
//s3.showData();
}
}
Шаг 2 — Скомпилируйте и запустите программу. Изначально создаются два объекта Student и две ссылочные переменные. См. диаграмму ниже.

Шаг 3 — Раскомментируйте строки 20-22, затем запустите снова. Теперь s3 указывает на тот же объект, что и s2. Диаграмма показывает, что обе ссылки указывают на один объект.

Шаг 4 — Раскомментируйте строки 23-24. Установка s2 в null оставляет s3 как единственную ссылку, поэтому объект всё еще жив.

Шаг 5 — Раскомментируйте строки 25-26. Когда и s2, и s3 установлены в null, объект становится пригодным для GC. Финальная диаграмма иллюстрирует это состояние.

Как сделать объект пригодным для сбора
- Присвойте его ссылочной переменной значение
null. GC вернет память при следующем запуске. - Примитивные типы (
int,doubleи т.д.) не являются объектами и не могут бытьnull.

Примечание: явные финализаторы не рекомендуются; полагайтесь на GC.
java
- Освоение операторов Java: типы, синтаксис и практические примеры
- Интерфейсы в Java: концепции, реализация и лучшие практики
- Try-with-resources в Java: автоматическое управление ресурсами
- Аннотации в Java: типы, размещение и практические примеры
- Ключевое слово static в Java: переменные, методы и блоки — практические примеры
- Интерфейс vs Абстрактный класс в Java: Как выбрать правильную абстракцию
- Перегрузка конструкторов в Java — Объяснение с практическими примерами кода
- Java Collections Framework: полное руководство по эффективным структурам данных
- Java 10: интерфейс Garbage Collector и параллельный Full GC для G1
- Java 10: размещение кучи на NV-DIMM через -XX:AllocateHeapAt