Це трохи залежить від того, коли ви думали обнулити посилання.
Якщо у вас є об’єктний ланцюг A-> B-> C, після того, як A не буде доступний, A, B і C всі будуть придатні до вивезення сміття (якщо припустити, що більше нічого не стосується або B, або C). Наприклад, немає необхідності явно встановлювати посилання A-> B або B-> C на нуль, наприклад, і ніколи не було.
Крім цього, більшість часу питання насправді не виникає, адже насправді ви маєте справу з предметами в колекціях. Як правило, завжди потрібно думати про видалення об'єктів зі списків, карт тощо, викликаючи відповідний метод видалення ().
Випадок, коли раніше були поради щодо встановлення посилань на null, був спеціально у великій області, коли об'єкт, що займає пам'ять, перестав використовуватись частково через область застосування . Наприклад:
{
BigObject obj = ...
doSomethingWith(obj);
obj = null; <-- explicitly set to null
doSomethingElse();
}
Обґрунтування тут полягало в тому, що оскільки obj все ще знаходиться в області застосування, то без явного обміну посиланням він не стає сміттєзбірним, поки не завершиться метод doSomethingElse () . І це рада, яка, ймовірно, більше не відповідає сучасним JVM : виявляється, що компілятор JIT може опрацювати, в який момент дана локальна посилання на об'єкт більше не використовується.