🤔
Как система понимает, что WeakReference можно очистит?Как система понимает, что WeakReference можно очистит?
Система определяет, что объект, на который ссылается
WeakReference
, можно очистить, используя механизм сборщика мусора (Garbage Collector, GC).
🚩
Механизм работы WeakReference и GC🟠
Сильные ссылки и слабые ссылкиСильные ссылки (Strong Reference): Объекты, на которые имеются сильные ссылки, не подлежат сборке мусора.
Слабые ссылки (Weak Reference): Объекты, на которые имеются только слабые ссылки, могут быть собраны сборщиком мусора.
🟠
Создание слабой ссылкиКогда создается
WeakReference
, она содержит слабую ссылку на объект, позволяя GC собирать объект, даже если
WeakReference
все еще существует.
MyObject myObject = new MyObject();
WeakReference weakRef = new WeakReference<>(myObject);
🟠
Работа сборщика мусораОпределение доступности объекта: GC проверяет объекты в памяти и их ссылки. Если на объект нет сильных ссылок (только слабые), он считается недоступным и подлежит сборке.
Сборка мусора: GC освобождает память, занимаемую объектом, и удаляет записи о слабых ссылках.
Очистка WeakReference: Когда объект собирается, WeakReference автоматически очищается, и метод get() начинает возвращать null.
🟠
Пример работыПосле создания слабой ссылки и удаления сильной ссылки, объект становится кандидатом на сборку мусора. После вызова
System.gc()
, если на объект больше нет сильных ссылок, он будет собран, а
WeakReference
будет очищена.
Ставь 👍👍 и забирай 📚 📚 Базу знанийБазу знаний