Это алгоритмы для сбора мусора молодого поколения.
Второй (UseParNewGC) активируется автоматически с помощью коллекции мусорного сбора с одновременным накоплением (см. Java Concurrent и Parallel GC), но существует ли разница между двумя параллельные алгоритмы?
Ответ 1
После многого поиска лучшее объяснение, которое я нашел, - это веб-сайт настройки производительности Java в Вопрос месяца: 1.4.1 Алгоритмы сбора мусора, 29 января 2003 г.
Алгоритмы сбора мусора молодого поколения
Копировальный коллектор (оригинал) (по умолчанию включен). Когда этот коллектор запускается, все потоки приложений прекращаются, и копировальная коллекция продолжается с использованием одного потока (что означает только один процессор, даже если на многопроцессорной машине). Это называется коллекцией "стоп-мир", потому что в основном JVM останавливает все остальное, пока сбор не будет завершен.
Параллельный копировальный коллектор (включен с использованием -XX: + UseParNewGC). Как и оригинальный копировальный коллектор, это коллекционер стоп-мира. Однако этот сборщик распараллеливает коллекцию копий по нескольким потокам, что более эффективно, чем оригинальный однопоточный копировальный коллектор для многопроцессорных машин (хотя и не для однопроцессорных машин). Этот алгоритм потенциально ускоряет сбор молодых поколений в расчете на количество доступных ЦП по сравнению с оригинальным однопоточным копировальным коллектором.
Параллельный сборщик выбросов (включен с использованием -XX: UseParallelGC). Это похоже на предыдущий параллельный копировальный коллектор, но алгоритм настроен на гигабайтные кучи (более 10 ГБ) на многопроцессорных машинах. Этот алгоритм сбора данных предназначен для максимизации пропускной способности и минимизации пауз. Он имеет необязательную адаптивную политику настройки, которая автоматически изменяет размеры кучи. Если вы используете этот коллектор, вы можете использовать только оригинальный коллекционер маркировки в старом поколении (т.е. Более новый коллектор с одновременным сбором старого поколения не может работать с этим коллектором молодого поколения).
Из этой информации кажется, что основное отличие (помимо сотрудничества CMS) заключается в том, что UseParallelGC поддерживает эргономику, в то время как UseParNewGC не делает.
Ответ 2
UseParNewGC обычно известен как "параллельный коллектор молодого поколения" одинаково во всех отношениях, как параллельный сборщик мусора (-XX: + UseParallelGC), за исключением того, что он более изощрен и эффективен. Также он может использоваться с "одновременным сбором низкой паузы".
Для получения дополнительной информации см. Java GC FAQ, вопрос 22.
Обратите внимание, что есть некоторые известные ошибки с UseParNewGC
Ответ 3
Parallel GC
- XX: + UseParallelGC Используйте параллельную сборку мусора для очистки. (Представлено в 1.4.1)
- XX: + UseParallelOldGC Используйте параллельную сборку мусора для полных коллекций. Включение этой опции автоматически устанавливает -XX: + UseParallelGC. (Представлено в версии 5.0. 6.)
UseParNewGC
UseParNewGCИспользуется параллельная версия копировального аппарата молодого поколения с параллельным коллектором (то есть, если -XX: + UseConcMarkSweepGC является используется в командной строке, тогда флаг UseParNewGC также имеет значение true если он явно не задан в командной строке).
Возможно, самым простым способом понять были комбинации алгоритмов сбора мусора, сделанные Алексей Рагозин
<table border="1" style="width:100%">
<tr>
<td align="center">Young collector</td>
<td align="center">Old collector</td>
<td align="center">JVM option</td>
</tr>
<tr>
<td>Serial (DefNew)</td>
<td>Serial Mark-Sweep-Compact</td>
<td>-XX:+UseSerialGC</td>
</tr>
<tr>
<td>Parallel scavenge (PSYoungGen)</td>
<td>Serial Mark-Sweep-Compact (PSOldGen)</td>
<td>-XX:+UseParallelGC</td>
</tr>
<tr>
<td>Parallel scavenge (PSYoungGen)</td>
<td>Parallel Mark-Sweep-Compact (ParOldGen)</td>
<td>-XX:+UseParallelOldGC</td>
</tr>
<tr>
<td>Serial (DefNew)</td>
<td>Concurrent Mark Sweep</td>
<td>
<p>-XX:+UseConcMarkSweepGC</p>
<p>-XX:-UseParNewGC</p>
</td>
</tr>
<tr>
<td>Parallel (ParNew)</td>
<td>Concurrent Mark Sweep</td>
<td>
<p>-XX:+UseConcMarkSweepGC</p>
<p>-XX:+UseParNewGC</p>
</td>
</tr>
<tr>
<td colspan="2">G1</td>
<td>-XX:+UseG1GC</td>
</tr>
</table>
Ответ 4
Использование -XX: + UseParNewGC вместе с -XX: + UseConcMarkSweepGC приведет к увеличению времени паузы для Minor GCs по сравнению с -XX: + UseParallelGC.
Это связано с тем, что для продвижения объектов от Young до Old Generation потребуется запустить алгоритм Best-Fit (из-за фрагментации старого поколения), чтобы найти адрес для этого объекта.
Выполнение такого алгоритма не требуется при использовании -XX: + UseParallelGC, так как + UseParallelGC может быть настроен только с помощью MarkandCompact Collector, и в этом случае фрагментация отсутствует.