Я читаю Эффективную Java, и я наткнулся на этот термин, "Устаревшая ссылка". Когда ссылка является устаревшей ссылкой? Я предполагаю, что все объекты, которые не выходят за рамки и остаются неиспользованными, являются устаревшими ссылками. Исправьте меня, если я ошибаюсь.
Что означает устаревшая ссылка в java?
Ответ 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, невозможно для этих объектов и объектов, находящихся внутри этих объектов, и это приводит к утечке памяти.