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

104
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
Как правильно передать массив в метод?

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

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

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

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

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

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

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

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

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

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

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

232