#java #garbage-collection
#java #сборка мусора
Вопрос:
car_object_1
Сможет ли собирать мусор? Кто-то утверждает, что as car_object_1
имеет две ссылки, поэтому она никогда не будет собрана в гараже. Это правда?
Car createACar()
{
Car c = new MyCar(); //car_object_1 was created
return c;
}
void use_the_car()
{
Car c2 = createACar();
c2.run();
}
Ответ №1:
Нет, они несут чушь. Предполагая, что внутри нет ничего, run()
в котором где-то хранится ссылка, автомобиль имеет право на сбор мусора после c2.run();
утверждения в use_the_car
.
Java не учитывает ссылки — даже циклические ссылки не являются проблемой (например, когда a Car
и a Driver
имеют ссылку друг на друга, но ничто не имеет ссылки ни на один из них).
Возможно, человек, с которым вы разговаривали, думал о несколько иной ситуации?
Комментарии:
1. 1: Существует только одна ссылка на объект в любое время, после
use_the_car
возврата ссылок больше нет. (если бы послеc2.run()
был оператор, он не соответствовал бы требованиям до тех пор, пока ссылка не выйдет за пределы области видимости.