Сборщик мусора по умолчанию для Java 8


95

Какой сборщик мусора по умолчанию для Java 8?

Когда я проверяю JMX Beans, они показывают, что это параллельный сборщик для нового поколения и старый последовательный сборщик для старого поколения.

Ответы:


131

Сборщики мусора по умолчанию:

  • Java 7 - параллельный сборщик мусора
  • Java 8 - параллельный сборщик мусора
  • Java 9 - G1 GC
  • Java 10 - G1 GC

1
Ссылка на источник информации.
Эдуард Вирч,

80

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

  • Для машины серверного класса, определяемой как машина с 2 или более физическими процессорами и 2 или более ГБ физической памяти (независимо от платформы), сборщиком мусора по умолчанию является параллельный сборщик (также известный как сборщик пропускной способности).
  • Для машины клиентского класса, определяемой как 32-битная платформа в Windows или однопроцессорной машины, сборщик мусора по умолчанию - это последовательный сборщик.

Поскольку практически все машины имеют 2 или более ЦП, JVM практически всегда считает машину серверным классом. Вот почему вы найдете много ссылок на параллельный сборщик как на сборщик мусора по умолчанию.


56

В Java есть четыре типа сборщиков мусора (до версии 10), но после стабильного выпуска java 11 их будет 5 типов. Это:-

  1. Серийный сборщик мусора S GC
  2. Параллельный сборщик мусора- P GC
  3. Сборщик мусора CMS- CMS GC
  4. Сборщик мусора G1- G1 GC
  5. Сборщик мусора Z- ZGC

Реализации GC по умолчанию в java -

JVM GC

 Java 7 - P GC       
 Java 8 - P GC
 Java 9 - G1 GC
 Java 10- G1 GC
 Java 11- Z GC(I am not sure but it would be default GC of java 11)

Более подробную информацию о ZGC, пожалуйста, посетите

http://openjdk.java.net/projects/zgc/

https://www.opsian.com/blog/javas-new-zgc-is-very-exciting/

Примечание: если вы хотите проверить, какой GC в настоящее время используется JVM, вы можете выполнить следующую команду, чтобы показать GC по умолчанию: -

$ java -XX:+PrintCommandLineFlags -version 

Если вы хотите установить GC в соответствии с вашими потребностями, вы можете сделать это с помощью следующей команды. Здесь я собираюсь установить G1 GC как GC по умолчанию.

$ java -XX:+UseG1GC -XX:+PrintCommandLineFlags -version 

введите описание изображения здесь

For more details , please visit 

https://javapapers.com/java/types-of-java-garbage-collectors/

https://alvinalexander.com/java/java-jvm-how-show-which-garbage-collector-running


Было бы полезно упомянуть источник диаграммы для дальнейших подробностей
xagaffar

2
привет @xagaffar вот URL-адрес источника javapapers.com/java/types-of-java-garbage-collectors
Браджеш

3
@Brajesh Я не думаю, что ZGC является сборщиком мусора по умолчанию для JDK 11. В открытой вики- версии JDK ( wiki.openjdk.java.net/display/zgc/Main ) говорится: «Используйте -XX: + UnlockExperimentalVMOptions -XX: + UseZGC options, чтобы включить ZGC. " это означает, что это не по умолчанию.
Ашиш Кумар

1
Нет, это не стандарт JDK11. -XX: + UnlockExperimentalVMOptions -XX: + UseZGC options to enable ZGC to unlock ZGC
vsingh

1
Блок-схемы на рисунке действительно полезны для объяснения разницы между «последовательным», «параллельным» и «параллельным» сборщиками мусора, но это становится действительно бессмысленным с этими девятью цветными квадратами для сборщика G1. Что они должны означать? Нити становятся квадратами?
Хольгер,

-1

Начиная с Java 9 до Java 15 G1GC используется по умолчанию даже в Java 15, который добавляет два сборщика мусора нового поколения: один, который Oracle разрабатывает ZGC, и реализация Red Hat, которая является Shenandoah, оба готовы к производству в Java 15 сентября 2020 года.


1. Shenandoah подходит только для OpenJDK, у Oracle его нет. 2. ZGC не является сборщиком мусора по умолчанию для JDK 8 и 11, его все еще нужно использовать UnlockExperimentalVMOptions, но на jdk 15 больше нет. 3. ParallelGC - это сборщик мусора по умолчанию для JDK 8, о чем собственно и идет речь.
Франсиско Мело младший,

Я заявляю, что с Java 9 до Java 15 G1GC по-прежнему используется по умолчанию ... даже когда недавно было добавлено 2 новых GC ..
chiperortiz,

Нет. Вы сказали Since Java 8 until Java 15 the G1GC is the default even on Java 15, что формулировка неправильная. JDK 8 по умолчанию - Parallel, вы сами сказали, что комментируете ответ, который все еще неверен. Shenandoah можно использовать в JDK 8 и JDK 11, он был перенесен обратно.
Франсиско Мело младший,

Да, извините, я действительно имею в виду Java 9
chiperortiz
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.