В Java 1 я не верю, что объект может быть собран во время выполнения instanceMethod()
.В фрейме стека метода main
является ссылкой на объект, по крайней мере, логически (JIT-компилятор может исключить его).Тот факт, что вы не присваиваете ее переменной, не сильно влияет на байт-код.
Конечно, когда instanceMethod()
завершается, объект может иметь право на сборку мусора -но это не так.Например, instanceMethod()
может хранить ссылку на this
в статической переменной.
По сути, не стоит зацикливаться на сложных угловых делах - просто полагайтесь на GC, собирающий объекты, которые недоступныкаким-либо иным способом, но не собирать объекты, которые все еще могут использоваться.
1 В .NET объект может по-прежнему подвергаться сборке мусора, покаметод экземпляра выполняет «в» объекте, если JIT-компилятор может доказать, что ни одна из его переменных не будет прочитана снова.Это очень запутанно и может привести к очень тонким ошибкам.