Как будет работать GC

92
23 февраля 2021, 17:50

Рассмотрим случай, когда объект хранит ссылку на самого себя. Ну например что-то вроде такого

public class A {
   private A a;
   public A() {
      a = this;
   }
}

Каким в данном случае будет жизненный цикл объектов данного класса? GC не трогает объекты до тех пор, пока есть ссылки на них. Следует ли из этого то, что объекты этого класса как минимум будут храниться в памяти до тех пор, пока я не присвою переменной a значение null?

Answer 1

Объекты не удаляются до тех пор пока они "достижимы" (доступны по ссылкам) от так называемого "корня" (GC root).

Ссылки не достижимые от корня в том числе и циклические ссылки не являются препятствием для сборки мусора.

В зависимости от варианта используемого алгоритма сборки мусора, есть различия в том, какие стадии сборки и в какой момент запускаются и по какому признаку объекты разделены на так называемые "поколения"(generations), однако упрощенная схема сборки примерно одна для большинства сборщиков:

  1. Объекты помечаются как достижимые (MARK)

  2. GC кушает недостижимые объекты (SWEEP)

Визуализация примерной схемы работы алгоритма Garbage Collector использующего алгоритм из подмножества Mark-Sweep

READ ALSO
Как правильно передать массив в метод?

Как правильно передать массив в метод?

Вопрос глупый, но сижу уже несколько часовМне нужно в созданный массив добавить кучу текстовых строк

139
Обработать пустой ответ JSON

Обработать пустой ответ JSON

С сервера приходит ответ такого плана:

101
Валидация всех полей формы

Валидация всех полей формы

Как сделать чтобы валидация происходиладля всех полей сразу а не по одному

98
Решето Эратосфена на js

Решето Эратосфена на js

Дано число n (n > 1)Выведите строку, состоящую из простых чисел, меньших n

223