предисловие
В предыдущих нескольких блогах мы примерно представили общиеАлгоритм сборки мусораи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
Объекты:
-
стек виртуальных машинОбъекты, на которые есть ссылки (таблица локальных переменных);
-
область методасерединастатическая переменнаяуказанный объект;
-
область методасерединапостоянныйуказанный объект;
-
собственный стек методовОбъекты, указанные в (
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
Процесс работы коллектора более сложен и делится на четыре этапа:
- Начальная отметка (начальная отметка CMS)
начальная отметкапросто отметьтеGC Roots
Внутрипрямая ассоциацияОбъект. этот этапвысокоскоростной,необходимостьStop the World
.
- Параллельная отметка (одновременная отметка CMS)
одновременная маркировкачто происходитGC Tracing
,отGC Roots
начать кучуАнализ доступности, выяснитьуцелевший объект.
- Замечание (замечание CMS)
перемаркироватьсцена дляисправитьВо время параллелизма из-заПользователь работаетвызванныйИзменение тегата часть объектапометить запись. на данном этапевремя паузыобычно больше, чемначальная фаза маркировкинемного длиннее, но намного длиннее, чемодновременная маркировкавремени мало, а также требуетStop The World
.
- Параллельная проверка (одновременная проверка CMS)
Параллельная очисткаЭтап убирает объекты мусора.
начальная отметка(
CMS initial mark
)иперемаркировать(CMS remark
) приведет кТема пользователяКатон,Stop the World
происходит явление.
во всем процессе,CMS
Переработчиквосстановление памятив основном иТема пользователяВыполнить одновременно следующим образом:
так какCMS
Переработчикпараллельный сбор,Низкая пауза, поэтому некоторые места становятсяПараллельный сборщик с низкой паузой(Concurrent Low Pause Sweep Collector
).
CMS
Недостатки коллекторов:
- Переработчик CMS очень зависит от ресурсов ЦП
CMS
Коллекционер слишком надеется намногопоточная среда, который включен по умолчаниюПотокиза(CPU 的数量 + 3)/ 4
,когдаCPU
меньше, чем4
часы,CMS
правильноПользовательский запросВлияниеВыполнение потока коллектора;
- Переработчик CMS не может очищать плавающий мусор
так какCMS
ПереработчикОчистить отмеченный мусор(на последнем этапе),Тема пользователяВсе еще работает, так что будет генерироваться новый мусор. Но эта часть мусорабез опознавательных знаков,в следующий разGC
очищаться и поэтому называтьсяплавающий мусор.
так каквосстановление памятииТема пользователявыполняются одновременно, а памятьРециркулироватьВ то же время также ведетсяраспределять. когдастарое поколениеКогда использование памяти превышает определенный процент, системавывоз мусора;когдаоставшаяся памятьКогда требования к работе программы не могут быть выполнены, система появитсяConcurrent Mode Failure
, временно принятыйSerial Old
Алгоритм продолжениячистый, В настоящее времяпредставлениеуменьшится.
- Много космического мусора остается после окончания сбора мусора
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
шаги:
- Начальная отметка (начальная отметка CMS)
начальная отметкапросто отметьтеGC Roots
Внутрипрямая ассоциацияОбъект. этот этапвысокоскоростной,необходимостьStop the World
.
- Параллельная отметка (одновременная отметка CMS)
одновременная маркировкачто происходитGC Tracing
,отGC Roots
начать кучуАнализ доступности, выяснитьуцелевший объект.
- Замечание (замечание CMS)
перемаркироватьсцена дляисправитьВо время параллелизма из-заПользователь работаетвызванныйИзменение тегата часть объектапометить запись. на данном этапевремя паузыобычно больше, чемначальная фаза маркировкинемного длиннее, но намного длиннее, чемодновременная маркировкавремени мало, а также требуетStop The World
.
- Проверка на переработку
Сначала для каждого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
Эта учетная запись будет продолжать делиться сухими товарами серверных технологий, включая основы виртуальных машин, многопоточное программирование, высокопроизводительные фреймворки, асинхронное ПО, промежуточное ПО для кэширования и обмена сообщениями, распределенные и микросервисы, материалы для обучения архитектуре и расширенные учебные материалы и статьи.