Подтвердить что ты не робот

Что означает устаревшая ссылка в java?

Я читаю Эффективную Java, и я наткнулся на этот термин, "Устаревшая ссылка". Когда ссылка является устаревшей ссылкой? Я предполагаю, что все объекты, которые не выходят за рамки и остаются неиспользованными, являются устаревшими ссылками. Исправьте меня, если я ошибаюсь.

4b9b3361

Ответ 1

Устаревшая ссылка (как используется в книге, хотя она не является широко используемым техническим термином) - это тот, который хранится вокруг, но никогда не будет использоваться, не позволяя объекту, на который он ссылается, иметь право на сбор мусора, утечка памяти.

Ответ 2

Устаревшая ссылка - это просто ссылка, которая никогда не будет разыменована снова.

Из Effective Java,

Сохранение устаревших ссылок constitutes memory leaks в Java. Это также называется непреднамеренным удержанием объекта.

Отбрасывание ссылки для удаления устаревших ссылок на объект хорошо, но нельзя переусердствовать. Лучший способ устранить устаревшая ссылка на повторно использовать переменную, в которой она содержалась или позволить ему выпасть из сферы действия.

Например, для удаления устаревшей ссылки

public Object pop() {
    if (size == 0)
        throw new EmptyStackException();
    Object result = elements[--size];
    elements[size] = null; // Eliminate obsolete reference
    return result;
}

Ответ 3

Вы правы. В принципе, устаревшая ссылка - это то, что не влияет на более поздний поток программы и должно быть установлено в null, чтобы помочь сбор мусора.

Например:

Строка a = "некоторое значение"; ,, ,,//некоторая обработка здесь // однажды сделаем это а = NULL;//a устаревшая ссылка

Ответ 4

неиспользуемые объекты, которые все еще имеют ссылки (могут быть не преднамеренно), и эта ссылка не ссылается на ваше приложение/программу/код, тогда эта ссылка является устаревшей ссылкой. поскольку эта ссылка по-прежнему остается для этих неиспользуемых объектов, GC, невозможно для этих объектов и объектов, находящихся внутри этих объектов, и это приводит к утечке памяти.