Я читаю Эффективную 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, невозможно для этих объектов и объектов, находящихся внутри этих объектов, и это приводит к утечке памяти.