Каждый процесс java, который я запускаю на моей машине, по умолчанию имеет 2 сборщика мусора. Я проверяю это через JConsole.
Пример - для моего текущего затмения.
PS MarkSweep
Collection Count - 221
Collection Time - 102118
Memory Pool Names - java.lang.String[4]
PS Scavenge
Collection Count - 241
Collection Time - 2428
Memory Pool Names - java.lang.String[2]
Я предполагаю, что у них перекрывающиеся пулы. Как два сборщика мусора работают вместе, используя одни и те же пулы (Eden, survivor, old gen)? Нет ли совпадений в перемещении объектов между пулами (например, движение от одного выжившего к другому при вызове второго алгоритма)? Даже если это не так, почему нам нужно больше, чем один коллекционер на пул?
Я прочитал эту статью о GC. Они относятся к использованию разных коллекционеров для разных основных и младших GC, но, похоже, нет ссылки на использование нескольких коллекторов в одном пуле.