Ответ
Да, может и сделает это. Основной критерий для сборки мусора — отсутствие достижимости объекта из так называемых "корней" (GC Roots). Если на объект нет сильных (strong) ссылок, он становится "недостижимым" и будет удален в одном из последующих циклов сборки мусора.
Пример:
public void someMethod() {
Object object = new Object(); // 1. Создан объект, есть сильная ссылка 'object'.
object = null; // 2. Ссылка обнулена. Объект теперь недостижим.
// 3. Объект помечен как подлежащий удалению. GC удалит его, когда сочтет нужным.
}
Важные уточнения:
- Не мгновенно: GC работает асинхронно. Удаление может произойти не сразу после обнуления ссылки.
- Циклические ссылки: Объекты, ссылающиеся друг на друга, но недостижимые из GC Roots, также будут удалены. Современные GC (начиная с mark-sweep) справляются с циклами.
- Метод
finalize(): Его использование не рекомендуется, но если он переопределен, он даст объекту последний шанс "воскреснуть" (хотя это плохая практика) и отсрочит его удаление.