Зачем нам нужен «уборщик» во время уборки мусора? - PullRequest
0 голосов
/ 13 февраля 2020

Предположим, что мы используем алгоритм сбора мусора с разметкой меток, если мы можем пометить выделения памяти как «исправимые», разве этого не достаточно? Разве программа не знает, что «исправляемая» память - это в основном неиспользуемая память, которая может быть выделена по запросу? Каковы физические различия между «восстанавливаемым» куском по сравнению с «неиспользуемым» куском, как показано на этом рисунке: enter image description here

Ответы [ 2 ]

1 голос
/ 13 февраля 2020

Шаг развертки - это просто «еще один» способ отсрочить событие «останови мир». Конечно, в теории это хорошо. При маркировке также следите за этим «свободным» пространством, где были обнаружены мертвые объекты. Таким образом, вы можете использовать эту информацию из этих списков при следующем размещении.

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

Мое последнее замечание: CMS устарело, никто не поддерживает, поэтому понимание того, что оно делает, может быть интересным, но не очень полезным; как другие G C делают вещи по-другому.

1 голос
/ 13 февраля 2020

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

Sweeping - Во время фазы очистки кучи обходятся, чтобы найти промежутки между живыми объектами , Эти промежутки записываются в свободном списке и становятся доступными для размещения новых объектов.

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

...