Вы должны понимать, что ваша переменная o2
и ОБЪЕКТ, обозначенный o2
, отличаются.
Переменная o2 фактически является указателем (хотя Java предпочитает называть их «ссылками») и занимает 4 или 8 байтов в кадре автоматического стека.Это хранилище не является сборщиком мусора и удаляется только при выходе из процедуры (или, возможно, при выходе из скобок {}
в зависимости от реализации компилятора).
Объект "обозначенный" (на который указывает) o2 по существу доступен для возможной сборки мусора, как только операция new Object()
заканчивается, и наличие указателя на него в o2 - это все, что предотвращает,Если переменная o2 либо больше не существует в кадре стека , либо в ней хранится другое значение указателя , тогда объект может быть собран.
Так что в вашем конкретном случае ответ"может быть".Это зависит от того, как компилятор и JIT обрабатывают {}
, наряду с несколькими «удачливыми» вопросами относительно того, будет ли повторно использован блок хранения {}
(но не метод в целом), место хранения для o2для чего-то другого.