Выбор ответа Middle JVM: память, GC, загрузка классов спрашивают часто обновлено
Когда объект становится мусором
Вопрос
Два объекта ссылаются друг на друга, но ни одна переменная программы на них не ссылается. Соберёт ли их GC?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Да: они недостижимы от GC roots. GC в JVM не считает ссылки, а обходит граф от корней: стеков потоков, статических полей, JNI-ссылок.
Варианты ответа
- Нет: у каждого есть ссылка, счётчик не равен нулю
- Да: они недостижимы от GC rootsправильный ответ
- Только если вызвать
System.gc() - Нет, пока не закончится поток, который их создал
Разбор
GC в JVM не считает ссылки, а обходит граф от корней: стеков потоков, статических полей, JNI-ссылок. Циклические ссылки внутри недостижимой группы не мешают сборке. Подсчёт ссылок со своей проблемой циклов это про другие среды (например, CPython). System.gc() лишь подсказка, сборка произойдёт и без неё.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «JVM: память, GC, загрузка классов»
- Делегирование загрузчиков
- JVM в контейнере
- Сборщик по умолчанию
- Escape analysis
- Этапы загрузки класса
- GC roots
- Области памяти JVM
- Metaspace