Уплотнение G1GC внутри регионов - PullRequest
2 голосов
/ 02 декабря 2019

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

Ответы [ 2 ]

3 голосов
/ 11 декабря 2019

В руководстве по настройке сборки мусора VM * HotSpot 1002 * говорится в разделе Ошибка выделения (эвакуации) :

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

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

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

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

0 голосов
/ 04 декабря 2019

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

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

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

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

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

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

...