что подразумевается под устаревшей ссылкой в ​​Java? - PullRequest
21 голосов
/ 27 июля 2011

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

Ответы [ 4 ]

11 голосов
/ 27 июля 2011

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

5 голосов
/ 27 июля 2011

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

С 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;
}
2 голосов
/ 27 июля 2011

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

Например;

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

0 голосов
/ 27 апреля 2014

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

...