сборщик мусора с низкой задержкой
Почему Shenandoah и ZGC называются low latency GC, ведь почти весь процесс работы параллельный, и только начальная и конечная разметка имеют короткие паузы.Время паузы этой части в основном фиксировано.Пропорциональной зависимости между производительностью нет и количество объектов в куче. Фактически, все они могут добиться паузы сборки мусора менее десяти миллисекунд при любой управляемой емкости кучи (например, ZGC сейчас может управлять кучей только в пределах 4 ТБ), что раньше звучало как фантастика и невероятная цель. Эти два сборщика, которые все еще находятся в экспериментальном состоянии, официально называются «сборщиками мусора с малой задержкой».
Тремя наиболее важными показателями для измерения сборщиков мусора являются: площадь основания, пропускная способность и задержка, которые вместе образуют «невозможный треугольник».
1. Сборщик мусора Шенандоа
Shenandoah больше похож на преемника G1 следующего поколения, чем на ZGC с родословной Oracle Zhengshuo, которая будет представлена позже. Решение, использующее указатель пересылки (также часто называемый указателем косвенного обращения) для обеспечения перемещения объекта и параллелизма пользовательской программы.
Так как же Шенандоа лучше по сравнению с G1?
Хотя Shenandoah также использует макет памяти кучи на основе региона, он также имеет HumongousRegion для хранения больших объектов, и стратегия утилизации по умолчанию также заключается в том, чтобы отдать приоритет региону с наибольшим значением утилизации... Но с точки зрения управления памятью кучи, это имеет по крайней мере три с G1. Наиболее важным отличием, конечно, является поддержка параллельных алгоритмов сортировки. Фаза восстановления G1 может быть распараллелена несколькими потоками, но не может быть параллельна с пользовательскими потоками. Как основная функция Shenandoah, автор остановится на этом позже. Во-вторых, Шенандоа (на данный момент) не использует генерационную коллекцию по умолчанию.Иными словами, не будет специального региона нового поколения или региона старого поколения, и генерация поколений не реализована.Это не значит, что генерация поколений не имеет значения для Шенандоа , что является более экономичным компромиссом, и ему отводится более низкая приоритетная позиция из соображений рабочей нагрузки. Наконец, Shenandoah отказывается от набора памяти, который потребляет много памяти и вычислительных ресурсов для обслуживания в G1, и использует глобальную структуру данных, называемую «матрицей соединений», для записи эталонных отношений между регионами, уменьшая необходимость иметь дело с указателями перекрестного поколения. , Это также уменьшает проблему ложного обмена.
Рабочий процесс сборщика Shenandoah можно условно разделить на следующие девять этапов.
-
Начальная маркировка. Этот этап по-прежнему называется «Остановить мир», но время паузы не имеет ничего общего с размером кучи, а только с количеством корней GC.
-
Параллельная маркировка Как и G1, он проходит по графу объектов и отмечает все достижимые объекты.Этот этап выполняется одновременно с пользовательскими потоками.Продолжительность времени зависит от количества уцелевших объектов в куче и структурной сложности графа объектов.
-
Окончательная маркировка Аналогично G1, обработайте оставшиеся сканы SATB и подсчитайте области с самым высоким значением восстановления на этом этапе и сформируйте эти области в набор сбора. Также будет короткая пауза на заключительном этапе оценки.
-
Параллельная очистка Этот этап используется для очистки регионов, которые даже не нашли живого объекта во всем регионе.
-
Параллельная коллекция На этом этапе Shenandoah сначала копирует живые объекты из коллекции в другие неиспользуемые регионы. Копирование объекта довольно просто, если вы замораживаете пользовательский поток и делаете это снова, но становится сложнее, если оба действия должны выполняться одновременно. Сложность в том, что при перемещении объекта пользовательский поток может продолжать читать и записывать доступ к перемещаемому объекту.Перемещение объекта является разовым поведением, но после перемещения все ссылки на объект во всей памяти остаются старый адрес объекта, который сложно изменить сразу. Для этих трудностей, возникающих на этапе параллельной переработки, Shenandoah решит их с помощью барьеров чтения и указателей пересылки, называемых «указателями Брукса» (я вернусь, чтобы представить их после объяснения всего рабочего процесса Shenandoah). Продолжительность фазы параллельного сбора зависит от размера коллекции.
-
Первоначальное обновление ссылок После завершения копирования объектов в фазе параллельного сбора все ссылки на старые объекты в куче необходимо исправить на новые адреса после копирования.Эта операция называется обновлением ссылок.
-
Параллельное обновление ссылок Начинается фактическая операция обновления ссылок.Эта фаза выполняется одновременно с пользовательским потоком, и ее продолжительность зависит от количества ссылок, задействованных в памяти. Параллельное обновление ссылки отличается от параллельной разметки тем, что больше не нужно искать по графу объектов, нужно только линейно искать тип ссылки в порядке физического адреса памяти, и менять старое значение на новое значение .
-
Окончательное обновление ссылок После разрешения обновления ссылок в куче исправьте ссылки, которые существуют в корнях GC. Эта фаза является последней паузой Шенандоа, и время паузы связано только с количеством корней GC.
-
Параллельная очистка После одновременного сбора и обновления ссылок все регионы во всем наборе коллекций не имеют уцелевших объектов.Наконец, процесс параллельной очистки вызывается снова, чтобы освободить пространство памяти этих регионов для будущего размещения новых объектов.
Выступление коллекционера Шенандоа
Shenandoah не полностью достиг поставленной цели при проведении этого теста в 2016 г. Время паузы действительно было качественным скачком по сравнению с другими сборщиками, но оно не достигло цели контроля максимального времени паузы в пределах десяти миллисекунд.Что касается пропускной способности, Произошел заметный спад.
Производительность Шенандоа улучшается день ото дня, постепенно приближаясь к цели «Малая пауза». Кроме того, RedHat также активно расширяет использование Shenandoah, бэкпортируя его на JDK 11 или даже JDK 8, чтобы больше приложений, которым неудобно обновлять версию JDK, также могли пользоваться передовыми результатами развития технологии сборщиков мусора. .
2. Коллектор ЗГК
ZGC — это экспериментальный сборщик мусора с малой задержкой, недавно добавленный в JDK 11, разработанный корпорацией Oracle. В 2018 году Oracle создал JEP 333 для отправки ZGC в OpenJDK, включив его в список выпусков OpenJDK 11.
Цели ZGC и Shenandoah очень похожи, и оба надеются достичь низкой задержки, которая может ограничить время паузы сборки мусора менее чем десятью миллисекундами при любом размере кучи памяти, не влияя на пропускную способность в максимально возможной степени. Однако идеи реализации ZGC и Shenandoah существенно различаются.
Коллектор ZGC — это макет памяти на основе региона, который (временно) не имеет генерации поколений.Он использует такие технологии, как барьеры чтения, цветные указатели и множественное сопоставление памяти для реализации параллельных алгоритмов маркировки и сортировки с малой задержкой, как первый приоритет.Сборщик мусора для цели.
Реализация алгоритма параллельной сортировки
Shenandoah использует указатели переадресации и барьеры чтения для реализации параллельной сортировки.Хотя ZGC также использует барьеры чтения, он использует совершенно другую и более сложную идею решения проблем, чем Shenandoah.
Характерной конструкцией коллектора ZGC является используемая им технология Colored Pointer, которая непосредственно записывает информацию о маркировке на указателе эталонного объекта. Указатель также является носителем информации для компьютера, но в настоящее время теоретически доступной информации в памяти намного больше, чем реально требуется.Хотя старшие 18 бит Linux не могут быть использованы для адресации, оставшихся 46 бит достаточно Чтобы удовлетворить потребности, команда ZGC покрасила носитель информации об указателе и использовала его старшие 4 бита для хранения информации о четырех маркерах.Благодаря этим битам флага виртуальная машина может напрямую видеть состояние трехцветного маркера объекта, на который ссылаются, из указатель.Вошел ли он в набор перераспределения (то есть был ли он перемещен) и доступен ли он только через метод finalize().
Поскольку эти флаговые биты еще больше сжимают адресное пространство, которое изначально было всего 46-битным, это также напрямую приводит к тому, что память, которой может управлять ZGC, не может превышать 4 ТБ (2 в степени 42).
Три преимущества окрашенных указок:
-
Цветные указатели позволяют освободить и повторно использовать регион, как только его живые объекты будут удалены, без необходимости ждать, пока все ссылки на регион во всей куче будут исправлены, прежде чем его можно будет очистить.
-
Цветные указатели могут значительно сократить количество барьеров памяти, используемых в процессе сборки мусора. Целью установки барьеров памяти, особенно барьеров записи, обычно является запись изменений в ссылках на объекты. Если эта информация хранится непосредственно в указателях, очевидно, что Вы можете сэкономить деньги. Выполните несколько специальных операций ведения журнала.
-
Окрашенный указатель можно использовать в качестве расширяемой структуры хранения для записи большего количества данных, связанных с процессом маркировки и перемещения объектов, с целью дальнейшего повышения производительности в будущем.
Как обычный процесс, виртуальная машина Java может свободно переопределять несколько битов некоторых указателей в памяти.Поддерживает ли это операционная система? Процессор поддерживает?
Решение здесь включает в себя технологию сопоставления виртуальной памяти. Рассматривая бит флага в указателе окраски как символ сегмента адреса, пока эти разные сегменты адреса отображаются в одно и то же пространство физической памяти, после многократного преобразования отображения указатель окраски может использоваться для обычной адресации.
Процесс работы ZGC можно условно разделить на следующие четыре основных этапа.
-
Параллельная метка: Параллельная метка - это этап обхода графа объектов для анализа достижимости.В отличие от G1 и Shenandoah, метка ZGC выполняется на указателе вместо объекта, и указатель окрашивания будет обновляться на этапе маркировки. Флаги Marked 0 и Marked 1 в .
-
Параллельная подготовка к перемещению: на этом этапе необходимо рассчитать, какие регионы должны быть очищены в этом процессе сбора в соответствии с конкретными условиями запроса. стоимость более широкого диапазона сканирований заменяется на стоимость обслуживания набора памяти в G1. Кроме того, на этом этапе также завершается выгрузка классов и обработка слабых ссылок, которые начали поддерживаться в ZGC JDK12.
-
Параллельное перемещение: перераспределение является основным этапом выполнения ZGC.В этом процессе уцелевшие объекты в наборе перераспределения копируются в новый регион, и для каждого региона в наборе перераспределения ведется таблица переадресации (таблица переадресации), которая записывает отношения пересылки от старого объекта к новому объекту. Благодаря поддержке цветных указателей сборщик ZGC может четко знать, находится ли объект в наборе перераспределения только по ссылке.Если пользовательский поток одновременно обращается к объекту в наборе перераспределения в это время, доступ будет перехвачен сборщиком. предустановленного барьера памяти, а затем сразу перенаправляет доступ к вновь скопированному объекту в соответствии с записью таблицы переадресации в Регионе, и в то же время исправляет и обновляет значение ссылки, чтобы оно прямо указывало на новый объект. это поведение Для "самовосстановления" (Self-Healing) возможности указателя.
-
Параллельное переназначение: все переназначения фиксируют все ссылки в куче на старые объекты в наборе перераспределения. Одновременное переназначение ZGC не является задачей, которую необходимо выполнить «срочно», потому что, как упоминалось ранее, ZGC обладает способностью к «самовосстановлению» и в худшем случае перепрыгнет еще на один уровень. исправлены, таблица переадресации, в которой записана взаимосвязь между старыми и новыми объектами, может быть освобождена.
Производительность коллектора ZGC
-
Концепция дизайна ZGC на сегодняшний день является самым передовым результатом исследований сборщиков мусора.Однако должны быть плюсы и минусы, прежде чем ее можно будет назвать компромиссом.Этот выбор ZGC [иллюстрация] также ограничивает скорость выделения объектов он может выдержать Высокий, единственный способ в настоящее время — максимально увеличить размер кучи, чтобы получить больше времени на передышку.
-
Другое преимущество ZGC, которое часто упоминается в технических документах, заключается в том, что он поддерживает выделение памяти для неоднородных архитектур доступа к памяти с поддержкой NUMA. Из-за постепенного отказа от закона Мура современные процессоры обратились к многоядерным разработкам из-за ограниченного развития частоты, в результате чего, если вы хотите получить доступ к памяти, управляемой другими ядрами процессора, вы должны использовать канал Inter-Connect. локальная память процессора намного медленнее, и сборщик ZGC предпочтительно будет пытаться размещать объекты в локальной памяти процессора, где в настоящее время находится запрашивающий поток, чтобы обеспечить эффективный доступ к памяти.
-
С точки зрения пропускной способности «слабых элементов» ZGC, ZGC с низкой задержкой в качестве основной цели достиг 99% Parallel Scavenge с высокой пропускной способностью в качестве цели, напрямую превзойдя G1.
-
ZGC можно легко контролировать в течение десяти миллисекунд
Отказ от ответственности: Справочник «Углубленное понимание виртуальной машины Java: расширенные функции и рекомендации JVM (3-е издание)», эта версия была доступна на рынке всего два месяца, в нее добавлены некоторые новые знания о стратегиях GC и распределения памяти, все желающие могут посмотреть. Если есть какие-либо нарушения, пожалуйста, свяжитесь, чтобы удалить, спасибо!
Если вам нравятся мои статьи, обратите внимание на мой публичный аккаунт, который пока находится на начальной стадии, спасибо за вашу поддержку.
Обратите внимание на паблик аккаунт, ответьтеjava架构
Получите архитектурные видеоресурсы (другие высококачественные ресурсы будут опубликованы позже). Отвечать找对象
Я могу втянуть тебя в группу знакомств IT-одиночек.
Чтобы просмотреть прошлые статьи, нажмите на мой адрес GitHub:GitHub.com/Антикоррупционное бюро 2016/ Просто…