Сборка мусора в массиве Java - PullRequest
0 голосов
/ 25 января 2019

Я получил 2 класса.

  1. ToyCar
  2. ToyShop

В ToyShop есть поле toyCar, которое принимает объект ToyCar.

public static void main(String[] args) {
  ToyCar[] cars = new ToyCar[3];
  cars[0] = new ToyCar();
  cars[1] = new ToyCar();
  cars[2] = new ToyCar();
  ToyShop company = new ToyShop();
  company.setToyCar(cars[2]);
  cars[0] = null;
  cars[1] = null;
  cars = null;
  print(company.getToyCar())
}

Если я запустлю программу, будет ли массив автомобилей собирать мусор или просто автомобили [0] и автомобили [1] собираются ??

Если массив собирает мусор, могу ли я распечатать toyCar в компании ??

Если мой вопрос не имеет смысла, пожалуйста,указать.

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Почти наверняка программа завершится до запуска GC. Так что ... технически ... ничто не является мусором.

Аналогичным образом, когда метод main завершится, все созданные им объекты будут недоступны и могут быть удалены. (Даже если программа не завершилась.)

Однако, когда вы доберетесь до оператора print, объект company станет достижимым, а его поле toy будет доступным, поэтому значение этого поля будет достижимо ... а объект ToyCar - его означает, что сборка мусора не будет выполнена, независимо от того, был ли запущен GC к тому времени.

Общее правило: если ваше приложение может достичь объекта, оно не будет собирать мусор. По сути, не беспокойтесь об этом. Объект все еще будет там, если ваш код сможет его использовать.

0 голосов
/ 25 января 2019

Вот эти три строки кода создают три различных новых объекта ToyCar

  cars[0] = new ToyCar();
  cars[1] = new ToyCar();
  cars[2] = new ToyCar();

После выполнения этих двух строк кода

cars[0] = null;
cars[1] = null;

первые два объекта автомобиля будут иметь право на сборку мусора. потому что в JVM нет внешней ссылки на этот объект.

Теперь зайдите на эту линию

ToyShop company = new ToyShop();
company.setToyCar(cars[2]);  //now car object at 2ond Index have external ref.

Здесь третья ссылка на объект назначается ссылочной переменной toyCar, представленной как переменная-член в company.

Итак, после выполнения строки cars = null; в JVM.

присутствует еще одна внешняя ссылка.

Таким образом, только 2 объекта будут иметь право на сборку мусора после выполнения cars = null;.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...