Правильный ответ: A, C, EЗа сборку мусора отвечает Garbage Collector, который автоматически освобождает память в куче. Он удаляет объекты, на которые нет активных ссылок. JVM решает, когда его запустить, отслеживая каждую из них.
Сборка мусора запускается по необходимости — когда уровень использования памяти превышает определённый порог или когда JVM считает это целесообразным.
Это связано с тем, что виртуальная машина управляет памятью, ожидая оптимального момента для её освобождения, чтобы минимизировать паузы и улучшить производительность программы.
- Вариант A правильный, так как экземпляр Bear, созданный в строке 11, доступен до строки 15. В ней переменной присваивается null, который перезаписывает ссылку на объект. Это делает его кандидатом на удаление при следующей сборке мусора
- Вариант B неправильный, поскольку противоречит A
- Вариант C правильный, поскольку объект Bear, созданный в строке 12, доступен как через polarBear, так и через brownBear.pandaBear. После строки 14 объект по-прежнему доступен через brownBear.pandaBear. Он становится недоступным только после строки 15, когда переменной brownBear присваивается null. JVM может их удалить при вызове System.gc(), но не обязана делать это немедленно. Если памяти в куче достаточно, объекты могут оставаться в ней до следующего оптимального момента
- Варианты D неправильный, поскольку противоречит C
- Вариант E правильный, поскольку запуск сборки мусора не гарантируется даже при вызове System.gc(). Данный метод лишь рекомендует JVM запустить сборщик мусора. Она может игнорировать эти вызовы, если сочтёт, что в данный момент сборка не требуется
- Вариант F неправильный, так как противоречит E