Garbage collector

1.

Garbage collector
astondevs.ru

2.

Сборщик мусора(Garbage Collector) - специальный процесс в JVM, который
периодически освобождает память, удаляя объекты, которые уже не будут
востребованы приложениями.

3.

Гипотеза о поколениях

4.

Разделение на области
Быстроживущие объекты (итераторы, локальные переменные методов,
неявные объекты)
Объекты со средним временем жизни. Создаются для выполнения
более-менее долгих вычислений. Они обычно гуляют по различным
методам, трансформируясь и обогащаясь в процессе, но после этого
становятся ненужными и превращаются в мусор
Объекты-старожилы. Переживают почти всех — это постоянные
данные программы, загружаемые часто в самом начале и проживающие
долгую и счастливую жизнь до остановки приложения

5.

Разделение на области
Heap состоит из:
New generation:
Eden space - в этой области выделяется память под
все создаваемые программой объекты. Жизненный цикл
большей части объектов, к которым относятся итераторы,
объекты внутри методов и т.п., недолгий.
Survivor space - здесь хранятся перемещенные из Eden Space
объекты после первой сборки мусора. Объекты,
пережившие несколько сборок мусора, перемещаются в
следующую сборку Tenured Generation.
Old generation(tenured generation) - хранит долгоживущие объекты.
Когда данная область памяти заполняется, выполняется
полная сборка мусора (full, major collection).

6.

Вопрос на 1 балл
Как понять, что объект жив?

7.

Подсчёт ссылок

8.

Трассировка
Roots – специальные объекты, которые GC
использует, чтобы определить, живой
объект или нет.
1. Local variables or anything stack frames
are referring to right now. These
variables are used by currently executing
methods, so we don't want to collect
them
2. Live threads
3. Static variables
4. Classes loaded by the system classloader

9.

Типы GC
Serial (последовательный) — самый простой вариант для приложений с
небольшим объемом данных и не требовательных к задержкам. Редко когда
используется, но на слабых компьютерах может быть выбран виртуальной машиной
в качестве сборщика по умолчанию.
Parallel (параллельный) — наследует подходы к сборке от последовательного
сборщика, но добавляет параллелизм в некоторые операции, а также возможности
по автоматической подстройке под требуемые параметры производительности.
Concurrent Mark Sweep (CMS) — нацелен на снижение максимальных задержек
путем выполнения части работ по сборке мусора параллельно с основными
потоками приложения. Подходит для работы с относительно большими объемами
данных в памяти.
Garbage-First (G1) — создан для постепенной замены CMS, особенно в
серверных приложениях, работающих на многопроцессорных серверах и
оперирующих большими объемами данных.

10.

https://habr.com/ru/articles/269621/ Серия статей GC “Дюк вынеси мусор”
English     Русский Правила