Поскольку документ, на который вы ссылаетесь, был для виртуальной машины 1.4.2, я предполагаю, что вы используете (JVM 5 и 6 ведут себя по-разному).
Из https://web.archive.org/web/20120624153924/http://java.sun.com/docs/hotspot/gc1.4.2/
если -XX:+UseConcMarkSweepGC используется в командной строке, то флаг UseParNewGC также устанавливается в значение true, если он не установлен явно в командной строке.
Таким образом, ответ заключается в том, что вам нужно использовать только -XX:+UseConcMarkSweepGC, и это включит параллельный сборщик с параллельным сборщиком молодого поколения.
Изменить: для Java 6 тот же флаг (-XX:+UseConcMarkSweepGC) включает параллельный сборщик. Выбор коллектора, который вы хотите, зависит от нескольких вещей, и вы должны протестировать различные конфигурации. Но есть несколько очень общих рекомендаций. Если у вас есть однопроцессорная машина с одним потоком, вам следует использовать сборщик последовательных портов (по умолчанию для некоторых конфигураций, можно явно включить с помощью -XX:+UseSerialGC). Для многопроцессорных машин, где ваша рабочая нагрузка в основном привязана к процессору, используйте параллельный сборщик. Это включено по умолчанию, если вы используете флаг -server, или вы можете включить его явно с помощью -XX:+UseParallelGC. Если вы предпочитаете, чтобы паузы сборщика мусора были короче за счет использования большего общего времени ЦП для сборщика мусора, и у вас более одного ЦП, вы можете использовать параллельный сборщик (-XX:+UseConcMarkSweepGC). Обратите внимание, что параллельный сборщик, как правило, требует больше оперативной памяти, выделенной для JVM, чем последовательный или параллельный сборщики для данной рабочей нагрузки, поскольку может произойти некоторая фрагментация памяти.
person
Community
schedule
21.10.2008