Garbage Collector в Java — кто удаляет ненужные объекты?
В Java не нужно вручную освобождать память после создания объектов. Этим занимается Garbage Collector (GC) — сборщик мусора.
Когда объект больше не доступен из работающего приложения через цепочки ссылок от GC Roots, он становится кандидатом на удаление. Сборщик мусора может освободить занятую им память.
Пример:
public class Main {
public static void main(String[] args) {
String user = new String("Alex");
user = null;
System.gc();
}
}
Что здесь происходит?
1. Создаётся объект `String`.
2. Переменная `user` перестаёт ссылаться на него.
3. Объект становится доступным для сборки мусора, если других ссылок на него нет.
4. `System.gc()` лишь просит JVM рассмотреть возможность запуска GC. Это не гарантирует, что сборка произойдёт немедленно.
Как работает Garbage Collector?
Упрощённо GC определяет, какие объекты ещё достижимы, и освобождает память, занятую недостижимыми объектами. При этом сборка мусора может создавать паузы, поэтому JVM старается управлять ею так, чтобы приложение работало эффективно.
В современных версиях Java доступны разные сборщики мусора, например:
* G1 GC — универсальный сборщик, используемый по умолчанию в большинстве стандартных конфигураций серверной JVM.
* ZGC — ориентирован на очень короткие паузы, в том числе в приложениях с большими объёмами памяти.
💡 Вопрос для начинающих:
Если присвоить переменной `null`, объект сразу удалится из памяти?
Ответ: нет. Он лишь может стать кандидатом на сборку мусора. Когда именно освободится память, решает JVM.
Просмотры: 10