У меня есть два вопроса. И один из них будет оскорблять тему :)Алгоритм параллельного компактирования коллектора
1) Я столкнулся с проблемой неспособности найти полную информацию о том, как работает сборщик мусора в HotSpot. Но я не говорю об общих описаниях работы сборщика мусора (у нас есть много этой информации в Интернете), я говорю о конкретных алгоритмах. Я нашел этот документ (управление памятью в виртуальной машине Java HotSpot) http://www.oracle.com/technetwork/java/javase/tech/memorymanagement-whitepaper-1-150020.pdf. Но у него есть только общие идеи. У этого есть хорошее описание (вероятно, это не так хорошо - см. Мой второй вопрос) алгоритма параллельного уплотнения (я имею в виду параллельный метка-развертка-компакт), но он не объясняет другие алгоритмы сборщика мусора. Однако этот документ - лучшая информация, которую я смог найти в Интернете. Я хотел бы знать, где получить полное описание/информацию о том, как разные сборщики мусора (для молодого поколения я имею в виду: ParNew, DefNew, PSYoungGen, для старого поколения: PSOLdGen, ParOldGen, Concurrent-Mark-Sweep). Не могу поверить, что эта информация недоступна для пользователей.
2) Вопрос о алгоритме параллельного компакционного коллектора (ParOldGen или Parallel Mark-Sweep-Compact). В техническом документе (см. Первый вопрос) есть описание его работы. Позволь мне вставить цитату из официального документа (пожалуйста, потратьте минуту, чтобы посмотреть на него):
Вещь, которые я не могу понять, перечислены ниже:
Что касается суммарной фазы:
-
Благодаря сжатия из предыдущих коллекций, это характерно, что некоторые части левой части каждого поколения будет плотной, содержащее в основном живые объекты. Объем пространства, который может быть восстановлен от , таких плотных регионов не стоит затрат на их уплотнение.
хорошо, это значит, что, когда у нас есть область, которые состоят из 98-99% живых объектов и 2-1% мертвых объектов (другими словами, очень небольшой процент мертвых объектов), чем уплотнение этой области не стоит пространства, которое можно было бы восстановить из такой области. Однако эти маленькие свободные пространства (отверстия) будут в конечном итоге заполнены, и после сбора мусора не будет отверстий.
-
Так что первое, что суммарная фаза делает исследовать плотность областей, начиная с крайней левой один, пока он не достигнет точки где пространство, которое может быть извлечено из региона и тех, к право от этого стоит стоимость уплотнения этих регионов.
хорошо, если у нас есть большой процент мертвых объектов, чем этот регион стоит уплотнения, не так ли?
-
Области слева от этой точки, называются плотной префикса, и никакие объекты не перемещаются в этих регионах.
«и никакие объекты не перемещаются в этих регионах», но там могут быть некоторые небольшие свободные пространства в тех регионах, я прав? Не могу uderstand точки
-
регионов справа от этой точки будет уплотнен, устраняя все мертвое пространство.
разъяснить, каким образом они будут спрессованы. Каждый регион будет уплотняться отдельно? Наверное, нет. Так может быть, какое-то смещение будет здесь?
-
Фазовые вычисляет и сохраняет суммарные новое местоположение первого байта данных в реальном времени для каждого уплотненного региона.
, чтобы понять это мне нужно понять предыдущий вопрос, я полагаю.
В отношении фазы уплотнения:
-
В фазе уплотнения, нити сборки мусора используйте
сводные данные, чтобы определить области, которые должны быть заполнены, а
нитей могут независимо друг от друга копировать данные в регионы. Это создает кучу , которая плотно упакована на одном конце, с единственным большим пустым
блоком на другом конце.
Я совершенно запутался. Так что на «итоговой фазе» не произошло уплотнения? Была ли цель предыдущего этапа только найти все свободные пространства?
Пожалуйста, помогите мне получить четкое изображение.
Я не знаю, как они работают, и я не делал этого сам, но для вас может быть полезно прочитать код сборщика мусора в OpenJDK. – tmyklebu
Я предполагаю, что даже люди, которые поддерживают материал, не знают, как это работает, и это слишком сложно (и неустойчиво), чтобы написать книгу, которая точно описывает каждый нюанс каждого алгоритма. Я подозреваю, что вы ищете более подробную информацию, чем когда-либо. –
«Однако эти крошечные свободные пространства (отверстия) в конечном итоге будут заполнены, и после сбора мусора не будет никаких отверстий». Не так, как я это понимаю. Точка не является обычной кучей. «Отверстия» не заполняются. Вместо этого вы ожидаете, пока вся область не будет уплотнена. «Compacting» для большинства областей Hotspot подразумевает копирование всех объектов из старого пространства в новое пространство, пропуская «дыры». Точка доступа, по большей части, является сборщиком «стоп и копия». –