В Java сборщик мусора освобождает память, но иногда объекты всё равно «застревают» в памяти, что приводит к утечкам. Одним из эффективных способов предотвращения этого является использование WeakReference.
WeakReference позволяет ссылаться на объект без блокировки его сборщиком мусора. Если объект имеет только слабые ссылки, сборщик может его освободить. Пример создания слабой ссылки:
WeakReference<MyObject> weakReference = new WeakReference<>(new MyObject());
Теперь, если к MyObject не будет других сильных ссылок, сборщик сможет освободить его.
Как проверить и использовать WeakReference?
Чтобы использовать объект, на который указывает WeakReference, сначала убедитесь, что он не был собран сборщиком мусора:
MyObject obj = weakReference.get();
if (obj != null) {
// Объект еще в памяти
obj.performTask();
} else {
// Объект освобожден
}
Пример применения: кеширование данных
Использование слабых ссылок полезно для кеширования, так как сборщик может автоматически очистить кэшированные данные, если в памяти возникнет нехватка:
Map<String, WeakReference<Data>> cache = new HashMap<>();
Data data = fetchData("item1");
cache.put("item1", new WeakReference<>(data));
Если data больше нигде не используется, сборщик освободит его при необходимости.
Жми 🔥 если понравился пост