Ответ в том, что это зависит от используемых алгоритмов сборки мусора. В некоторых случаях вы правы, что все потоки остановлены во время GC. В других случаях вы ошибаетесь в том, что сборка мусора продолжается во время работы обычных потоков. Чтобы понять, как GC этого добиться, вам необходимо детальное понимание теории и терминологии сборщиков мусора в сочетании с пониманием конкретного сборщика. Это просто не поддается простому объяснению.
О, да, и стоит отметить, что многие современные сборщики не имеют фазы уплотнения как таковой. Скорее они работают, копируя живые объекты в новое «пространство» и обнуляя старое «пространство», когда они сделаны.
Если я ошибаюсь, на мой вопрос ответит простое объяснение стратегии, используемой для минимизации блокирования.
Если вы действительно хотите понять, как работают сборщики мусора, я рекомендую:
... и имейте в виду, что найти точные, подробные, публичные описания внутренних компонентов производственных сборщиков мусора нелегко. (Хотя в случае с Hotspot GC вы можете посмотреть исходный код ...)
РЕДАКТИРОВАТЬ: в ответ на комментарий ОП ...
«Кажется, это так, как я и думал - не обойти часть« останови мир ».»
Это зависит. В случае Java 6 Concurrent Collector , есть две паузы во время маркировки корней (включая стеки), а затем маркировка / копирование других объектов происходит параллельно. Для других видов одновременного сборщика используются барьеры чтения или записи, когда сборщик работает, чтобы перехватить ситуации, когда потоки сборщика и приложения могли бы мешать друг другу. У меня сейчас нет моей копии [Джонса], но я также напоминаю, что можно сделать интервал "остановить мир" незначительным ... за счет более дорогих операций с указателями и / или не собирая все мусор.