MyObject o; o = new MyObject(); o = new MyObject();
MyObject o; o = new MyObject(); o = null; o = new MyObject();
Я в первый момент сказал – никакой. Оказалось, разница есть, – с точки зрения сборки мусора.
Представьте себе, что у нас высокое потребление памяти. Так, что на второй объект MyObject ее может не хватить. Что происходит:
В первом случае – мы создаем один объект, пытаемся создать второй, памяти не хватает, запускается GC, памяти все равно не хватает, OutOfMemory.
Во втором случае – мы создает один объект, обнуляем ссылку, пытаемся создать второй, памяти не хватает, запускается GC, собирает первый объект, памяти хватает, она выделяется под второй объект, он создается.
То есть разница в том, в какой момент первый объект становится доступен для сборки – до или после создания второго объекта.
Забавно, раньше не задумывался над такой тонкостью.
Источник: http://habrahabr.ru/post/132500/