Получает ли мусор объект, являющийся точкой входа Java-программы? - PullRequest
1 голос
/ 02 января 2012

Если у меня есть класс Sample и у меня есть метод instance, instanceMethod в нем.В классе есть метод main, в котором я создаю сам объект Sample и вызываю его instanceMethod без использования ссылочной переменной.

, например:

new Sample (). InstanceMethod ();

внутри основного.

Поскольку этот объект НЕ имеет ссылки, будет ли сборщик мусора собирать его?

1 Ответ

6 голосов
/ 02 января 2012

В Java 1 я не верю, что объект может быть собран во время выполнения instanceMethod().В фрейме стека метода main является ссылкой на объект, по крайней мере, логически (JIT-компилятор может исключить его).Тот факт, что вы не присваиваете ее переменной, не сильно влияет на байт-код.

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

По сути, не стоит зацикливаться на сложных угловых делах - просто полагайтесь на GC, собирающий объекты, которые недоступныкаким-либо иным способом, но не собирать объекты, которые все еще могут использоваться.


1 В .NET объект может по-прежнему подвергаться сборке мусора, покаметод экземпляра выполняет «в» объекте, если JIT-компилятор может доказать, что ни одна из его переменных не будет прочитана снова.Это очень запутанно и может привести к очень тонким ошибкам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...