Серия JVM (шесть) — сборщик мусора JVM

задняя часть JVM алгоритм CMS

предисловие

В предыдущих нескольких блогах мы примерно представили общиеАлгоритм сборки мусораиJVMОбщие алгоритмы сортировки и переработки в . Они анализируются на основе алгоритма и спецификации.JavaСборка мусора в России относится к методологии. существуетJVMВ случае конкретной реализации сборки мусорауборщик мусора(Garbage Collector)Ответственный.

текст

Обзор

в пониманииуборщик мусораПеред этим вы должны сначала понять несколько терминов сборщика мусора.

1. Пропускная способность

CPUВремя, используемое для запуска пользовательского кода, такое же, какCPUСоотношение общего затраченного времени. Например, виртуальная машина всегда работает100минута,Код пользователявремя99минута,вывоз мусоравремя1минут, то пропускная способность99%.

Пропускная способность = время выполнения пользовательского кода / (время выполнения пользовательского кода + время сборки мусора)

2. Время паузы

время паузыОтносится к тому, когда работает сборщик мусора,применениеизВремя паузы. заЭксклюзивный коллекционерДругими словами, время паузы может быть больше. использоватьпараллельный коллектор, благодаря сборщику мусора и приложениюАльтернативная операция, процедурныйвремя паузыоднако будет короче из-заэффективныйВозможно, он не так хорош, как монопольный сборщик мусора, поэтому системапропускная способностьможет быть ниже.

3. СУ существительное

3.1. Малый общий сбор

относится кКайнозойдействие по сбору мусора, потому чтоJavaБольшинство объектов имеютжизнь и смертьхарактеристики, поэтомуMinor GCкак правилоочень часто, скорость восстановления обычно выше.

3.2 Старость GC (Major GC)

относится кстаростьакция по сбору мусора, естьMajor GC, часто сопровождаемый хотя бы однимMinor GC(так бывает, товся кучаВсеGCкогда-то часто называлиFull GC).Major GCобычно быстрее, чемMinor GCмедленный10раз больше.

4. Параллелизм и параллелизм

4.1 Последовательный (параллельный)

один потокзаниматься сбором мусора, но в это времяТема пользователядо сих пор внутрисостояние ожидания.

4.2. Одновременно

Параллелизм здесьТема пользователяипоток сбора мусораАльтернативное исполнение.

4.3 Параллельно

Параллелизм здесьТема пользователяи несколькопоток сбора мусорасоответственно в разныхCPUработать одновременно.

Алгоритм сборки мусора

1. Алгоритм поиска корня

алгоритм поиска корняОтдискретная математикаПредставленная теорией графов в , программа рассматривает все ссылочные отношения как граф, начиная с узлаGC ROOTначните, ищите соответствующийопорный узел, найдя этот узел, продолжить поискэтот узелизопорный узел. Когда все эталонные узлы будут найдены,остальные узлысчитаетсяне цитируетсяузел, то естьбесполезныйузел.

Вышекрасныйэто бесполезный узел, который может бытьРециркулировать. В настоящее времяJavaможно использовать какGC ROOTОбъекты:

  1. стек виртуальных машинОбъекты, на которые есть ссылки (таблица локальных переменных);

  2. область методасерединастатическая переменнаяуказанный объект;

  3. область методасерединапостоянныйуказанный объект;

  4. собственный стек методовОбъекты, указанные в (Nativeобъект).

в основном всеGCАлгоритмы указаныалгоритм поиска корняэто понятие.

2. Алгоритм маркировки-развертки

алгоритм маркировки-разверткиоткорневой наборсканироватьживой объектпровестиотметка. После разметки просканируйте все пространствобез опознавательных знаковобъектпрямая переработка,Как показано ниже:

алгоритм маркировки-разверткине требуетсядвижение объекта, и только дляне живойобрабатываемый объект, ввыживатьОбъектболеев случаечрезвычайно эффективный. Но из-заалгоритм маркировки-разверткиНапрямую перерабатывать невыжившие объекты и не выполнять операции над выжившими объектами.аккуратный, тем самым приводя кфрагментация памяти.

3. Алгоритм репликации

алгоритм репликацииРазделить память надва интервала, при использовании этого алгоритма всединамическое размещениеобъекты могут быть размещены только водин изинтервал (Диапазон активности),иЕще одининтервал (пространственный интервал) являетсяпраздныйиз.

алгоритм репликацииТакже изкорневой наборсканировать, будетвыживатьОбъекткопироватьприбытьсвободное место. После сканирования активного диапазона будетДиапазон активностивсе вместеРециркулировать. В это время оригиналсвободное местосталДиапазон активности. в следующий разGCВремя от времени предыдущая операция будет повторяться, и цикл будет повторяться.

алгоритм репликацииживой объектчуть меньшеочень эффективен, но ценаЖертвовать половиной памятидля проведениядвижение объекта. такалгоритм репликацииСценарий использования должен соответствовать объекту.очень низкая выживаемостьПросто сделай это. Самое главное, нам нужно преодолеть50%изпустая трата памяти.

4. Алгоритмы организации тегов

алгоритм маркировки-сопоставленияиспользоватьалгоритм маркировки-разверткиобъект таким же образомотметка, но переработканеживой объектЗаняв место, всеживой объектсвободное место слевапереехатьи обновите соответствующий указатель.

Отметить-организоватьвотметка-ясновыше, сноваПереместить сортировку объектов,следовательноболее высокая стоимость, но решаетфрагментация памятиПроблема.

JVMзаоптимизировать памятьвторичной переработки, бывших в употребленииПереработка поколенийПуть. заПамять молодого поколения.переработка (Minor GC) в основном используетсяалгоритм репликации. И длястарая памятьпереработка (Major GC), в основном с использованиемалгоритм маркировки-сопоставления.

уборщик мусора

1. Критерии классификации сборщиков мусора

2. Обзор семи сборщиков мусора

существуетJVM, конкретная реализация имеетSerial,ParNew,Parallel Scavenge,CMS,Serial Old(MSC),Parallel Old,G1Ждать. На изображении ниже вы можете видетьразные сборщики мусораподходит дляразличные области памяти, если между двумя сборщиками мусораЕсть связь, то это означает, что оба могутС использованием.

если когдауборщик мусораПри уборке мусора необходимоПаузавсе остальныерабочий поток, пока он не будет полностью собран. Мы называем эту стратегию приостановки рабочих потоков для очистки какStop-the-World. В указанном выше переработчикеSerial,ParNew,Parallel Scavenge,Serial Old,Parallel OldиспользуютсяStop-the-Worldстратегия.

на картинке7разныеуборщик мусора, которые используются для разных поколений сборки мусора.

  • Коллекционер молодого поколения.: Серийный, ParNew, Параллельный Scavenge

  • коллекционер старости: Серийный старый, Параллельный старый, CMS

  • Сборщик всей кучи: G1

двауборщик мусораЛиния между ними указывает на то, что они могутДля использования с, необязательная схема коллокации выглядит следующим образом:

Кайнозой старость
Serial Serial Old
Serial CMS
ParNew Serial Old
ParNew CMS
Parallel Scavenge Serial Old
Parallel Scavenge Parallel Old
G1 G1

3. Однопоточный сборщик мусора

3.1 Серийный номер (-XX:+UseSerialGC)

SerialПереработчик является самым простымКайнозойсборщик мусора, даодин потокуборщик мусора. В связи с уборкой мусора,Serial Переработчикне существуетпереключение между потоками, поэтому, особенно в одиночномCPUокружающая среда, ееЭффективность удаления мусораотносительно высокий. заClientДля запуска программы в режиме выберитеSerialПереработчик - хороший вариант.

Serial Коллекционер молодого поколения.используетсяалгоритм репликации.

3.2. Старый серийный номер (-XX:+UseSerialGC)

Serial OldПереработчикSerialПереработчикверсия старого поколения,принадлежатьоднопоточный коллектор, который используетОтметить-организоватьалгоритм. заServerрежим виртуальной машины, вJDK1.5а раньше это часто ассоциировалось сParallel ScavengeПереработчики используются вместе для достижения лучшегопропускная способность, и это такжеCMSпереработчик вConcurrent Mode Failureвремяотступать.

Serialпереработчик иSerial OldЭффект исполнения коллектора следующий:

Serial Old коллекционер старостииспользуетсяАлгоритмы организации тегов.

4. Многопоточный сборщик мусора (сначала производительность)

4.1 ParNew (-XX:+UseParNewGC)

ParNewПереработчик находится вSerialСоздан на основе коллектора, принадлежащегоSerialПереработчикМногопоточная версия, который также работает вКайнозойский регион. С точки зрения реализации, у них много общего кода. В разных операционных средах, согласноCPUядра, наразное количество нитей, чтобы добитьсяоптимальныйЭффект сбора мусора. для техServerрежимные приложения, если вы рассматриваете возможность принятияCMSв видеколлекционер старого поколениячас,ParNewПереработчик - хороший вариант.

ParNew Коллекционер молодого поколения.используетсяалгоритм репликации.

4.2. Параллельная очистка (-XX:+UseParallelGC)

иParNewкак переработка,Parallel ScavengeКоллектор также работает наКайнозойский регион,принадлежатьМногопоточностьпереработчик. Но разница в том,ParNewКоллектор управляетсявывоз мусораизПотокинастроить параметры иParallel ScavengeКоллекционер больше заботится оПропускная способность программы. то есть в течение определенного периода времени,Код пользователяПродолжительностьобщее время работыпроцент.

Parallel Scavenge Коллекционер молодого поколения.используетсяалгоритм репликации.

4.3 Старый параллельный (-XX:+UseParallelOldGC)

Parallel OldПереработчикParallel ScavengeПереработчикверсия старого поколения,принадлежатьмногопоточный сборщик,использоватьалгоритм маркировки-сопоставления.Parallel Oldпереработчик иParallel ScavengeКоллекционер также считаетприоритет пропускной способностиЭтот индикатор очень подходит для тех,Сосредоточьтесь на пропускной способностииCPU чувствительный к ресурсамслучай.

Parallel Old коллекционер старостииспользуетсяАлгоритмы организации тегов.

5. Другие коллекционеры (сначала пауза)

5.1. CMS (-XX:+UseConcMarkSweepGC)

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

По сравнению с предыдущим коллектором,CMSПроцесс работы коллектора более сложен и делится на четыре этапа:

  1. Начальная отметка (начальная отметка CMS)

начальная отметкапросто отметьтеGC RootsВнутрипрямая ассоциацияОбъект. этот этапвысокоскоростной,необходимостьStop the World.

  1. Параллельная отметка (одновременная отметка CMS)

одновременная маркировкачто происходитGC Tracing,отGC Rootsначать кучуАнализ доступности, выяснитьуцелевший объект.

  1. Замечание (замечание CMS)

перемаркироватьсцена дляисправитьВо время параллелизма из-заПользователь работаетвызванныйИзменение тегата часть объектапометить запись. на данном этапевремя паузыобычно больше, чемначальная фаза маркировкинемного длиннее, но намного длиннее, чемодновременная маркировкавремени мало, а также требуетStop The World.

  1. Параллельная проверка (одновременная проверка CMS)

Параллельная очисткаЭтап убирает объекты мусора.

начальная отметка(CMS initial markперемаркировать(CMS remark) приведет кТема пользователяКатон,Stop the Worldпроисходит явление.

во всем процессе,CMSПереработчиквосстановление памятив основном иТема пользователяВыполнить одновременно следующим образом:

так какCMSПереработчикпараллельный сбор,Низкая пауза, поэтому некоторые места становятсяПараллельный сборщик с низкой паузой(Concurrent Low Pause Sweep Collector).

CMSНедостатки коллекторов:

  1. Переработчик CMS очень зависит от ресурсов ЦП

CMSКоллекционер слишком надеется намногопоточная среда, который включен по умолчаниюПотокиза(CPU 的数量 + 3)/ 4,когдаCPUменьше, чем4часы,CMSправильноПользовательский запросВлияниеВыполнение потока коллектора;

  1. Переработчик CMS не может очищать плавающий мусор

так какCMSПереработчикОчистить отмеченный мусор(на последнем этапе),Тема пользователяВсе еще работает, так что будет генерироваться новый мусор. Но эта часть мусорабез опознавательных знаков,в следующий разGCочищаться и поэтому называтьсяплавающий мусор.

так каквосстановление памятииТема пользователявыполняются одновременно, а памятьРециркулироватьВ то же время также ведетсяраспределять. когдастарое поколениеКогда использование памяти превышает определенный процент, системавывоз мусора;когдаоставшаяся памятьКогда требования к работе программы не могут быть выполнены, система появитсяConcurrent Mode Failure, временно принятыйSerial OldАлгоритм продолжениячистый, В настоящее времяпредставлениеуменьшится.

  1. Много космического мусора остается после окончания сбора мусора

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

5.2. Сборщик G1 (сначала мусорная зона в регионе)

G1даJDK 1.7официально введен в эксплуатацию вместоCMSизКомпрессионный коллектор. Он не разделен физическиКайнозойистарое поколение, но все же принадлежитГенерационный сборщик мусора.G1еще различатьмолодое поколениеистарость, молодое поколение по-прежнему разделеноEdenРайон иSurvivorПлощадь.

G1Первое местокучаразделен наравные по размеруизRegion,избегатьВся площадьвывоз мусора. затем проследить каждыйRegionМусорРазмер сложенного значения, который поддерживаетсписок приоритетов, в соответствии с допустимым временем переработки, чтобы отдать приоритет переработке наиболее ценныхRegion. в то же времяG1использоватьRemembered SetхранитьRegionмеждуссылка на объект, в других коллекторахКайнозойистаростьссылки на объекты между ними, что позволяет избежатьполное сканирование кучи.G1Пример раздела показан ниже:

это использованиеRegionразделятьпространство памятии имеютприоритетрегиональный метод утилизации, гарантирующийG1Коллекционер может получить как можно больше за ограниченное времяВысокая эффективность переработки.

G1иCMSВ процессе работы есть много общего, и весь процесс также делится на4шаги:

  1. Начальная отметка (начальная отметка CMS)

начальная отметкапросто отметьтеGC RootsВнутрипрямая ассоциацияОбъект. этот этапвысокоскоростной,необходимостьStop the World.

  1. Параллельная отметка (одновременная отметка CMS)

одновременная маркировкачто происходитGC Tracing,отGC Rootsначать кучуАнализ доступности, выяснитьуцелевший объект.

  1. Замечание (замечание CMS)

перемаркироватьсцена дляисправитьВо время параллелизма из-заПользователь работаетвызванныйИзменение тегата часть объектапометить запись. на данном этапевремя паузыобычно больше, чемначальная фаза маркировкинемного длиннее, но намного длиннее, чемодновременная маркировкавремени мало, а также требуетStop The World.

  1. Проверка на переработку

Сначала для каждогоRegionизстоимость переработкииСтоимостьСортировка в соответствии с ожиданиями пользователяGC время паузыразработать план утилизации. Эта фаза может быть объединена с пользовательской программой.параллельное выполнение, а потому что перерабатывается только частьRegion, время контролируется пользователем, а паузаТема пользователяЭффективность переработки значительно повысится.

с другимGCПо сравнению с переработкой,G1Имеет следующее4Функции:

  • Параллелизм и параллелизм

использовать несколькоCPUсокращатьStop-the-Worldизвремя паузы, некоторым другим сборщикам нужно сделать паузуJavaвыполняется потокомGCдействие,G1Переработчик все еще может пройтиПараллельный путьпозволятьJavaВыполнение программы продолжается.

  • Переработка поколений

Как и другие переработчики,Концепция генерациисуществуетG1еще сохраняется. Несмотря на то чтоG1может не понадобитьсяСовместимость с другими ресайклераминезависимое управлениевся куча GC, но он может использоватьразные стратегиииметь дело свновь созданный объективыжилПериод времени,выжил много раз GCстарые предметы для лучшей переработки.КайнозойистаростьБольше нефизическая изоляция, кратноравные по размерунезависимостьRegion.

  • пространственная интеграция

иCMSизочистка разметкиАлгоритмы разные,G1отобщийОн основан наотметить - организоватьРеализованный алгоритмом коллектор. отместный(дваRegionмежду) основан наалгоритм репликацииосуществленный.

Но так или иначе, этодва алгоритмаоба означаютG1Во время операцииНет фрагментации памяти, который может обеспечить обычную доступную память после утилизации. Эта функция полезна для того, чтобы программа работала в течение длительного времени,выделение крупных объектовне потому что его нельзя найтинепрерывное пространство памятисрабатывать ранов следующий раз GC.

  • предсказуемая пауза

ЭтоG1относительноCMSЕще одно важное преимуществоСокращение времени простоядаG1иCMSобщая забота.G1Помимо преследованиянизкая паузаКроме того, также возможно созданиепредсказуемыйизмодель времени паузы, что позволяет пользователю явно указатьдлиназаMмиллисекундаквант временив, потребляется ввывоз мусоравремя не должно превышатьNмиллисекунда. (сохраняется в фоновом режимесписок приоритетов, отдавать приоритет переработкебольшое значениеизRegion).

Ссылаться на

Чжоу Чжимин, Глубокое понимание виртуальной машины Java: расширенные функции и лучшие практики JVM, Machinery Industry Press


Добро пожаловать в технический публичный аккаунт: Zero One Technology Stack

零壹技术栈

Эта учетная запись будет продолжать делиться сухими товарами серверных технологий, включая основы виртуальных машин, многопоточное программирование, высокопроизводительные фреймворки, асинхронное ПО, промежуточное ПО для кэширования и обмена сообщениями, распределенные и микросервисы, материалы для обучения архитектуре и расширенные учебные материалы и статьи.