Мне известны концепции сборщиков мусора реального времени, инкрементных, инкрементальных, параллельных, параллельных (мягких / жестких) в реальном времени.Но я не могу понять, главным образом, одновременный сборщик мусора.Это отличается от одновременного GC?Какая разница?Почему это называется в основном?
Как и многие другие предметы, сборка мусора окутана туманом терминологической неопределенности.Бем особенно печально известен тем, что использовал обычные термины нетрадиционными способами, но мы должны простить его, потому что он был пионером в области в то время, когда обычные значения еще не были окостеневшими!: -)
Насколько я понимаю, «остановка мира» относится к алгоритму, который приостанавливает все потоки мутатора на всю продолжительность цикла GC, например, при маркировке всей кучи.Например, .NET Server GC делает это и, как следствие, получает огромные 300 мс паузы.Инкрементальные GC выполняют небольшую часть основной работы GC в каждом вспомогательном цикле GC, например, "основные срезы" в GC OCaml.Параллельно означает, что GC использует несколько потоков для ускорения процесса сбора мусора.Параллельный сборщик мусора означает, что сборщик мусора запускается одновременно с мутаторами, например рабочая станция .NET GC.Реальное время трудно определить, изначально подразумевалось ограниченное максимальное время паузы, но теперь также означает минимальное использование мутатора (MMU), чтобы избежать патологической проблемы GC, который никогда не останавливает мутатор на долгое время, никогда не позволяя ему работать!Согласно новой книге Ричарда Джонса, сборщик мусора «на лету» никогда не приостанавливает более одного мутатора за раз (т. Е. Фазы остановки мира не существует), хотя я подозреваю, что он имел в виду, что мутаторы приостановлены независимо друг от друга.Наконец, GC в основном параллельный - это тот, который приостанавливает все потоки мутатора одновременно, но только на короткий период времени, а не на произвольно длинный цикл GC.Следовательно, мутаторам разрешено свободно работать большую часть времени, пока работает GC, и, следовательно, он называется «главным образом одновременным» GC.
Классификация «главным образом одновременного» важна, потому что большинство (все?) основные GC попадают в эту категорию, потому что это обеспечивает хороший компромисс между временем паузы и пропускной способностью.Например, рабочая станция .NET GC приостанавливает все потоки мутатора при создании моментального снимка глобальных корней, но возобновляет их во время маркировки и очистки.