Что такое сборка мусора
Что проверяют
Понимаете ли, по какому признаку объект считается мусором, и умеете ли говорить о паузах и настройке. Java-собеседование почти всегда доходит до вопроса, почему сервис встаёт на секунду, и общего «память освобождается сама» тут не хватает.
Как отвечать
Сборщик определяет живые объекты не счётчиком ссылок, а обходом графа от корней: стеки потоков, статические поля, ссылки из нативного кода. Недостижимое считается мусором, поэтому циклические ссылки проблемой не являются. Из слабой гипотезы о поколениях, то есть из наблюдения, что большинство объектов умирает молодыми, вырастает деление кучи: молодое поколение собирается копированием выживших, старое уплотняется.
Дальше стоит показать, что знаете разные сборщики и их компромисс. G1 в современных версиях стоит по умолчанию, делит кучу на регионы и работает на заданную целевую паузу. ZGC и Shenandoah переносят почти всю работу, включая перемещение объектов, в конкурентные фазы, поэтому паузы почти не растут с размером кучи, но платят пропускной способностью и дополнительной памятью. Полностью без остановок не работает никто.
Настройка это прежде всего размер кучи и цель по паузе, а не десяток редких флагов. Смотреть надо журнал сборок и долю времени, проведённого в сборке, а не среднее потребление памяти.
Где спотыкаются
Путают сборку мусора с освобождением ресурсов. Сборщик управляет памятью, а файловые дескрипторы, сокеты и соединения он закрывать не обязан и момент своей работы не гарантирует. Ресурсы закрывают конструкцией с автоматическим закрытием, а вызов System.gc() это просьба, а не команда.
Уверены, что при автоматическом управлении утечек не бывает. Утечка тут выглядит иначе: объект достижим и потому жив, хотя не нужен. Классика это статическая коллекция, кэш без вытеснения и значение в ThreadLocal на пуле потоков, а результат всё та же нехватка памяти.
Объясняют длину паузы объёмом мусора. Копирующий сборщик платит за выживших, а не за умерших, поэтому огромный живой кэш в куче обходится дороже, чем поток короткоживущих объектов, и попытка уменьшить паузы увеличением кучи иногда делает их только длиннее.