Подтвердить что ты не робот

Какая разница между ParallelGC и ParallelOldGC?

У меня есть некоторые вопросы об алгоритме GC: Во-первых, когда мы используем такие параметры, как UseSerialGC, UseParallelGC, UseParallelOldGC и т.д., Мы указываем алгоритм GC. Каждый из них может делать GC во всем поколении, правильно?

Например, если я использую "java -XX: + UseSerialGC", все поколение будет использовать последовательный GC в качестве GC-алгоритма.

Во-вторых, я могу использовать ParallelGC в Old Gneneration и использовать SerialGC в гене поколений?

Последнее как название, какая разница между ParallelGC и ParallelOldGC?

4b9b3361

Ответ 1

Вы уже проверили это? Это отвечает на ваш первый и второй вопрос. http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html

На той же странице написано:

XX: -UseParallelGC = Использовать параллельную сборку мусора для очистки. (Представлено в 1.4.1).

-XX: -UseParallelOldGC = Использовать параллельную сборку мусора для полных коллекций. Включение этой опции автоматически устанавливает -XX: + UseParallelGC. (Представлено в обновлении 5.0.)

где Scavenges = GC молодого поколения.

Ответ 2

Чтобы ответить на ваш вопрос, нам нужно понять другой алгоритм. JVM предоставляет четыре коллекции мусора.

  • Серийный сборщик мусора
  • Пропускной коллектор
  • Коллекционер CMS
  • Коллекционер G1

Последовательный сборщик активируется с помощью флага -XX: + UseSerialGC (хотя обычно это по умолчанию в тех случаях, когда он может быть использован).

Серийный сборщик мусора является сборщиком по умолчанию, если приложение работает на машине клиентского класса (32-разрядные JVM на Windows или одиночный процессор машины). Серийный коллектор использует один поток для обработки кучи. Он остановит все приложения потоки при обработке кучи (для незначительного или полного GC). Во время полного GC это будет полностью компактное старое поколение.

UseParallelGC, UseParallelOldGC являются частью сборщика пропускной способности, который по умолчанию используется для многопроцессорных Unix-машин и любой 64-разрядной JVM.

Пропускной коллектор использует несколько потоков для сбора молодого поколения, что делает небольшие GC намного быстрее, чем когда используется последовательный коллектор. Пропускная способность коллекционер может использовать несколько потоков для обработки старого поколения. Это значение по умолчанию поведение в версиях JDK 7u4 и более поздних версий, и это поведение можно включить в более раннем JDK 7 JVM, указав флаг -XX: + UseParallelOldGC. Поскольку он использует несколько потоков, пропускной коллектор часто называют параллельным коллектором.

Так как это значение по умолчанию в большинстве где он будет использоваться, он не должен быть явно включен. Чтобы включить это, где необходимо использовать флаги -XX: + UseParallelGC -XX: + UseParallelOldGC

- Пинаки

Ответ 3

Это две политики gc, применяемые к различным областям Java-кучи, а именно: новое и старое поколение. Здесь ссылка, которая помогает уточнить, какие варианты подразумевают другие. Это особенно полезно, когда вы начинаете понимать, что получаете, когда указываете ParallelOldGC или ParNewGC.   http://www.fasterj.com/articles/oraclecollectors1.shtml