Sobes.tech
Назад к вопросам
Junior — Middle
68

Объясните, что такое слабая ссылка и как она отличается от сильной в управлении памятью?

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

sobes.tech AI

Сильная ссылка (strong reference) — это обычная ссылка на объект в Java. Пока существует хотя бы одна сильная ссылка на объект, сборщик мусора не удалит этот объект из памяти.

Слабая ссылка (weak reference) — это ссылка, которая не препятствует сборщику мусора удалять объект. Если объект доступен только через слабые ссылки, он считается кандидатом на сборку мусора.

Пример использования слабых ссылок — кэширование, где объекты могут быть удалены при нехватке памяти, чтобы не удерживать их в памяти постоянно.

Пример кода:

import java.lang.ref.WeakReference;

public class WeakReferenceExample {
    public static void main(String[] args) {
        Object strong = new Object();
        WeakReference<Object> weak = new WeakReference<>(strong);

        System.out.println("Before nulling strong: " + weak.get()); // объект доступен

        strong = null; // теперь объект доступен только через слабую ссылку

        System.gc(); // попытка вызвать сборщик мусора

        System.out.println("After GC: " + weak.get()); // может быть null, если объект собран
    }
}