Выпуск сборщика мусора

Этот вопрос похож на мой предыдущий

3. interface Animal { void makeNoise(); }
4. class Horse implements Animal {
5.   Long weight = 1200L;
6.   public void makeNoise() { System.out.println("whinny"); }
7.  }
8.  public class Icelandic extends Horse {
9.   public void makeNoise() { System.out.println("vinny"); }
10.  public static void main(String[] args) {
11.    Icelandic i1 = new Icelandic();
12.    Icelandic i2 = new Icelandic();
13.    Icelandic i3 = new Icelandic();
14.    i3 = i1; i1 = i2; i2 = null; i3 = i1;
15.  }
16. }

Когда достигнута строка 14, сколько объектов подходит для сборщика мусора?

А. 0

Б. 1

C. 2

D. 3

Е. 4

F. 6

Я выбрал А, но правильный ответ - Е, но я не знаю Почему?

2 ответа

Решение

Давайте назовем три Icelandic объекты, созданные в main как A, B а также C,

Initialy

  • i1=A, i2=B а также i3=C;

После i3 = i1

  • i1=A, i2=B а также i3=A;

После i1 = i2

  • i1=B, i2=B а также i3=A;

После i2 = null:

  • i1=B, i2=null а также i3=A;

После i3 = i1

  • i1=B, i2=null а также i3=B

В строке 14 есть постоянные ссылки только на B тип объекта Icelandic, A а также C теряются в запущенной программе.

каждый Icelandic потерянный объект дает сборщику мусора два объекта для сбора, т.е. Icelandic сам объект и Long объект в каждом Icelandic, которые составляют общее количество собранных мусором объектов 4.

поскольку makeNoise методы никогда не вызываются, они не меняют результат.

Если вы посмотрите внимательно, после всех заданий в конце i1 а также i3 указать на второй объект в то время как i2 указывает на null, Это означает два Icelandic объекты имеют право на GC.

каждый Icelandic объект содержит один Long что делает 4 объекта подходящими для GC всего. Интересно, если бы константа была 12Lответ будет: 2 из-за Long внутренний постоянный кеш. Также обратите внимание, что "whinny" а также "vinny" из постоянного пула и не будут собирать мусор.

Как только вы покидаете сферу, где все i1, i2 а также i3 объявлены, остальные два объекта также имеют право на GC.

Другие вопросы по тегам