Часто задаваемые вопросы на собеседовании - пожалуйста, уточните сборщик мусора Java!

Java задняя часть JVM
Часто задаваемые вопросы на собеседовании - пожалуйста, уточните сборщик мусора Java!

Это первый день моего участия в августовском испытании обновлений. Узнайте подробности мероприятия:  Испытание августовского обновления

Сегодня поговорим о сборщике мусора в Java.В предыдущей статье рассказывалось об алгоритме сборки мусора.На этот раз о сборщике мусора будет более глубокое состязание.Готовы?

Если вы не обладаете знаниями, связанными с JVM, вы можете сначала прочитать эти статьи, обратить внимание на колонку [Часто задаваемые вопросы для интервью] и вместе накапливать знания.

Часто задаваемые вопросы на собеседовании - пожалуйста, расскажите о структуре памяти JVM!

Часто задаваемые вопросы на собеседовании — пожалуйста, расскажите о разнице между кучей и стеком в JVM!

Часто задаваемые вопросы на собеседовании — знаете ли вы, какие алгоритмы задействованы в механизме сборки мусора?

Подробное понимание виртуальной машины Java написано в книге: Если алгоритм сбора — это методология утилизации памяти, то сборщик мусора — это конкретная реализация утилизации памяти.

В разные эпохи появлялись разные сборщики мусора, и они постоянно применяются в различных версиях виртуальной машины Java.

Во-первых, давайте нарисуем картинку, чтобы показать конкретные сборщики мусора.

image.png

На приведенном выше рисунке показано всего семь сборщиков, о которых мы хотим рассказать.Картина разделена на две части.Верхняя часть (Serial, ParNew, Parallel Scavenge) относится к сборщикам нового поколения, а нижняя часть (CMS, Serial Old, ParNew) Old) относятся к коллектору старого поколения, а G1 является специальным коллектором, потому что не делает различий между новым поколением и старым поколением.

Итерация коллекторов

До JDK1.3.1 сборщик Serial был единственным сборщиком нового поколения, и можно сказать, что другого выбора нет.

После JDK1.3.1 появились такие сборщики, как Parallel, CMS, G1 и т.д.

После обновления JDK1.7 Update14 сборщик в его виртуальной машине был официально заменен на сборщик G1.

Несколько очень важных концепций

Stop The World (механизм остановки сборки мусора): когда сборщик мусора выполняет сборку мусора, он должен приостановить все остальные потоки.Это приостановленное состояние будет продолжаться до конца этой задачи сборки мусора; этот процесс называется Stop The World, который можно назвать механизмом приостановки сборки мусора. Это также механизм, который есть у всех сборщиков мусора, ведь поток приостанавливается каждый раз, когда он собирается, что вызывает определенную задержку в системе.

Хотя невозможно решить проблему приостановки всех потоков, после многих лет усилий и обновления нескольких версий сборщика мусора процесс приостановки становится все короче и короче.

пропускная способность: время выполнения пользовательского кода / (время выполнения пользовательского кода + время паузы сборки мусора), чем больше пропускная способность, тем выше производительность сборщика.

Параллелизм и параллелизм в коллекторах:

(1) Параллелизм, задачи сборки мусора и рабочие потоки выполняются параллельно, но это не значит, что времени паузы не будет, но значительно сократит время паузы.

(2) Параллельно, в процессе сбора несколько задач сбора выполняются параллельно, чтобы сократить время паузы, вызванное Stop The World, тем самым повышая производительность сборки мусора.

Незначительный GC и полный GC:

Второстепенный сборщик мусора: Сборщик мусора нового поколения, работа по сборке мусора в памяти нового поколения, характеризуется частым выполнением и высокой скоростью восстановления.

Полная сборка мусора:Старая сборка мусора, сборка мусора в старой памяти.Старая сборка мусора также называется основной сборкой мусора.Во время выполнения может выполняться дополнительный сборщик мусора, но этот дополнительный сборщик мусора может не выполняться;конечно, скорость выполнения Полный GC в несколько раз медленнее, чем Minor GC.

Серийный коллекционер

зона сбора: новое поколение

использовать алгоритм: Алгоритм копирования

Поддерживать ли параллельно: не поддерживается, однопоточный сборщик.

Поддерживать ли параллелизм:не поддерживается

Известный как самый старый и самый простой сборщик, как однопоточный сборщик, простота и эффективность являются его преимуществами по сравнению с другими однопоточными сборщиками; также из-за одного потока в определенной степени отсутствуют накладные расходы на взаимодействие между потоками. С другой стороны, такая как легкая система уровня приложения, она создает простой и эффективный режим приложения.

Вот также общий процесс его сборки мусора:

(1) Один поток выполняет GC и приостанавливает все рабочие потоки.

(2) Используйте алгоритм репликации для сбора.

(3) После завершения сбора включается рабочий поток. Здесь также может быть полный сборщик мусора.

ParNew

зона сбора: новое поколение

использовать алгоритм: Алгоритм копирования

Поддерживать ли параллельно: поддержка, многопоточный сборщик.

Поддерживать ли параллелизм:не поддерживается

Можно сказать, что сборщик ParNew является многопоточной версией сборщика Serial, за исключением того, что он обрабатывает работу по сбору данных параллельно, остальные функции такие же, как у сборщика Serial.

В среде с одним ЦП сборщик Serial должен быть лучшим выбором.Поскольку существует больше взаимодействий потоков, производительность сборщика ParNew выше, чем у последовательного сборщика в среде сервера с несколькими ЦП.

Рабочий процесс ParNew примерно таков:

(1) Многопоточность выполняет GC и приостанавливает все рабочие потоки.

(2) Используйте алгоритм репликации для сбора.

(3) После завершения сбора включается рабочий поток. Здесь также может быть полный сборщик мусора.

Parallel Scavenge

зона сбора: новое поколение

использовать алгоритм: Алгоритм копирования

Поддерживать ли параллельно: поддержка, многопоточный сборщик.

Поддерживать ли параллелизм:не поддерживается

Сборщик Parallel Scavenge отличается от других сборщиков тем, что его назначение — контролировать пропускную способность, тогда как другие сборщики — максимально улучшать пропускную способность, то есть уменьшать и сокращать время паузы при работе сбора.

Чтобы контролировать пропускную способность, сборщик Parallel Scavenge специально предоставляет два параметра для достижения пропускной способности.

-XX:MaxGCPauseMillis (максимальное время паузы при сборке мусора): установите значение в миллисекундах, сборщик будет стараться, чтобы время восстановления памяти не превышало это значение, и не будет увеличивать скорость сборки.

-XX:GCTimeRatio (размер пропускной способности): целое число от 0 до 100, это значение представляет долю времени сборки мусора во всем времени процесса сборки.

Сборщик Parallel Scavenge также известен как сборщик пропускной способности.Вы также можете установить соотношение площади Eden и области Survivor через параметр -XX:SurvivorRatio.

Serial Old

зона сбора: старость

использовать алгоритм: алгоритм пометки для сортировки

Поддерживать ли параллельно: не поддерживается, однопоточный сборщик.

Поддерживать ли параллелизм:не поддерживается

Он немного отличается от сборщика Serial, но в процессе работы над сбором между ними нет никакой разницы.

Parallel Old

зона сбора: старость

использовать алгоритм: алгоритм пометки для сортировки

Поддерживать ли параллельно: поддержка, многопоточный сборщик.

Поддерживать ли параллелизм:не поддерживается

Parallel Old используется начиная с JDK 1.6. В случае высоких требований к пропускной способности или чувствительных ресурсов ЦП рекомендуется рассмотреть этот сборщик.

CMS

зона сбора: старость

использовать алгоритм: четко обозначенный алгоритм

Поддерживать ли параллельно: поддержка, многопоточный сборщик.

Поддерживать ли параллелизм:служба поддержки

CMS, полное название Concurrent Mark Sweep, нацелена на получение сборщика с кратчайшим временем паузы восстановления в качестве цели.CMS является относительно классической.Для достижения своей цели он использует четыре шага для реализации процесса сбора.

(1) Начальная отметка (2) Параллельная отметка (3) Замечание (4) Параллельная очистка

Отменяет ли это «Остановить мир»? Это невозможно, Stop The World все равно будет появляться во время начальной отметки, одновременной отметки.

Конкретные четыре шага в основном предназначены для того, чтобы что-то сделать, мы поговорим об этом в другой статье.

Еще один момент, на который следует обратить внимание, заключается в том, что CMS использует алгоритм «отметить-очистить», которому суждено генерировать большое количество фрагментации памяти, о чем часто спрашивают интервьюеры.

G1

зона сбора:все

использовать алгоритм: Алгоритм копирования

Поддерживать ли параллельно: поддержка, многопоточный сборщик.

Поддерживать ли параллелизм:служба поддержки

На самом деле про G1 можно написать в отдельной статье, а подробно будет рассказано позже, сегодня мы рассмотрим лишь некоторые особенности G1.

1. Параллельное и одновременное сосуществование с использованием ресурсов нескольких процессоров и нескольких ядер может более эффективно сократить время паузы Stop The World.

2. Хотя для очистки всей памяти используется только один сборщик, сбор по поколениям все равно выполняется, но обрабатывается по-другому.

3. Поскольку он управляет всей памятью, в пространственном измерении G1 делит память на несколько областей регионов, чтобы решить ситуацию со сбором с помощью алгоритма копирования.

4. Еще одним преимуществом G1 является то, что он может прогнозировать время паузы.

Комбинирование стратегий

Из семи типов сборщиков мусора, за исключением того, что G1 отвечает за новое поколение и старое поколение, как следует комбинировать оставшиеся шесть?

Из названия можно объединить Serial и Serial Old, а также Parallel Scavenge и Parallel Old.

С практической точки зрения Serial можно комбинировать с Serial Old и CMS, поскольку ParNew эквивалентен многопоточной версии Serial, поэтому ParNew, как и Serial, можно комбинировать с Serial Old и CMS.

Коллекционер Parallel Scavenge можно комбинировать с серийным старым коллекционером в дополнение к параллельному старому коллекционеру.

Давай, картинку выше, сделай понятнее,

image.png

На этом все семь типов коллекторов закончены.Только поняв суть, можно постепенно проводить тюнинговый запас знаний.Фундамент важнее всего, и все им дорожат.