Уплотнение G1GC внутри регионов

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


person Abidi    schedule 01.12.2019    source источник


Ответы (2)


Руководство по настройке HotSpot VM Garbage Collection говорится в Отказ выделения (эвакуации):

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

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

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

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

person Holger    schedule 11.12.2019
comment
меня в последнее время поражает, как мало информации по таким интересным темам можно найти в Интернете. после двух дней работы с исходным кодом G1 я почти уверен, что вы правы. Несмотря на то, что живость и размеры в определенной области очень хорошо известны каждому циклу GC, так что теоретически это возможно. - person Eugene; 08.10.2020
comment
@Eugene обычно есть разница между общей информацией о соотношении мусора в регионах, которая необходима для выбора регионов с наибольшим количеством мусора, и подробной информацией о промежутках между все еще доступными объектами в регионе. Для копирующего коллектора последний не нужен, что является одним из преимуществ копирующего коллектора. Так что просто избегать сохранения этой информации как можно дольше. - person Holger; 08.10.2020
comment
вы правы и я это понимаю, это подразумевается даже наличием G1ReservePercent... - person Eugene; 08.10.2020

когда G1 (сборщик мусора) начнет работать и в какой области памяти он будет собираться в первую очередь?

Куча разделена на множество эквивалентных предполагаемых областей кучи, каждая из которых представляет собой небольшой объем виртуальной памяти. Некоторым наборам районов назначаются похожие задания (Эдем, Выживший, Старый).

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

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

По сути, количество оперативных данных в каждом регионе отслеживается, и когда сбор запускается, G1GC сначала очистит те, которые содержат наибольшее количество «мусора».

Это означает, что он может собирать мусор и из полузаполненных регионов.

person Sreeram Nair    schedule 04.12.2019