В этом примере мы помечаем объект a для сборки мусора.
Нет, нет. Если вы не используете переменную позже в коде, сборщик мусора уже знает, что ссылка больше не используется. Он может собирать объект после последнего использования, поэтому объект может быть даже собран до , если для ссылки задано значение null.
Установка ссылки на null никак не влияет на сборщик мусора, если только вы не используете переменную позже в коде.
Foo a = new A();
try {
// some work with a;
// at this point a is no longer used, so it can be collected
} finally {
// this has no effect on garbage collection:
a = null;
}
Вам не нужно ничего делать с объектами, чтобы сделать их коллекционными, вы просто перестанете их использовать, и они будут собраны.
Единственные объекты, которые требуют специальной обработки, - это объекты, реализующие интерфейс IDisposable
. Вы должны вызвать метод Dispose
для этих объектов, когда закончите с ними, или поместить их в блок using
, который автоматически вызовет Dispose
.
Edit:
В добавленном вами сценарии, в котором для переменной задано значение null, это также не влияет на сборку мусора. Вы устанавливаете для локальной переменной значение null, которое не влияет на ссылку на объект, которую вы уже передали для возврата.