сборка мусора Java из-за множественной ссылки на объект

#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() был оператор, он не соответствовал бы требованиям до тех пор, пока ссылка не выйдет за пределы области видимости.