Domyślny garbage collector dla Java 8

95

Jaki jest domyślny moduł odśmiecania pamięci dla Java 8?

Kiedy sprawdzam JMX Beans, okazuje się, że jest to kolektor równoległy dla nowej generacji i stary kolektor szeregowy dla starej generacji.

Code Junkie
źródło

Odpowiedzi:

130

Domyślne odśmiecacze:

  • Java 7 - równoległy GC
  • Java 8 - Parallel GC
  • Java 9 - G1 GC
  • Java 10 - G1 GC
x4444
źródło
1
Podaj link do źródła informacji.
Eduard Wirch
80

Wybieranie (między innymi) domyślnego modułu odśmiecania pamięci to tzw. Proces ergonomii maszyny JVM. Ten proces zależy od klasy twojego komputera.

  • W przypadku maszyny klasy serwerowej, zdefiniowanej jako maszyna z 2 lub więcej procesorami fizycznymi i 2 lub więcej GB pamięci fizycznej (niezależnie od platformy), domyślnym modułem zbierającym elementy bezużyteczne jest kolektor równoległy (nazywany również kolektorem przepustowości).
  • W przypadku maszyny klasy klienta, zdefiniowanej jako platforma 32-bitowa w systemie Windows lub maszyna jednoprocesorowa, domyślnym modułem odśmiecania pamięci jest moduł zbierający elementy szeregowe.

Ponieważ praktycznie wszystkie maszyny mają 2 lub więcej procesorów, maszyna JVM praktycznie zawsze jest traktowana jako klasa serwera. Dlatego znajdziesz wiele odniesień, biorąc pod uwagę, że kolektor równoległy jest domyślnym zbieraczem elementów bezużytecznych.

Tunaki
źródło
56

Java ma cztery typy garbage collectorów (do wersji 10), ale po stabilnej wersji java 11 będzie to 5 typów. To są:-

  1. Szeregowy zbieracz śmieci S GC
  2. Równoległy zbieracz śmieci P GC
  3. CMS Garbage Collector CMS GC
  4. G1 Garbage Collector- G1 GC
  5. Zbieracz śmieci Z ZGC

Domyślne implementacje GC w Javie -

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)

Więcej szczegółów na temat ZGC można znaleźć na stronie

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

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

Uwaga: jeśli chcesz sprawdzić, który GC jest obecnie używany przez JVM, możesz przejść do następującego polecenia, aby wyświetlić domyślny GC: -

$ java -XX:+PrintCommandLineFlags -version 

Jeśli chcesz ustawić GC zgodnie ze swoimi potrzebami, możesz to zrobić, wykonując następujące polecenie. Tutaj mam zamiar ustawić G1 GC jako domyślny GC.

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

wprowadź opis obrazu tutaj

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

Brajesh
źródło
W celu uzyskania dalszych szczegółów
warto podać
2
cześć @xagaffar, tutaj jest adres URL źródła javapapers.com/java/types-of-java-garbage-collectors
Brajesh
3
@Brajesh Nie sądzę, że ZGC jest domyślnym GC JDK 11. Otwórz wiki JDK ( wiki.openjdk.java.net/display/zgc/Main ) stwierdza: „Użyj opcji -XX: + UnlockExperimentalVMOptions -XX: + UżyjZGC, aby włączyć ZGC ”. to znaczy, że nie jest to ustawienie domyślne.
Ashish Kumar,
1
Nie, to nie jest opcja domyślna JDK11. -XX: + UnlockExperimentalVMOptions -XX: + Użyj opcji ZGC, aby włączyć ZGC do odblokowania ZGC
vsingh
1
Diagramy przepływu na rysunku są naprawdę przydatne do wyjaśnienia różnicy między „szeregowymi”, „równoległymi” i „współbieżnymi” modułami wyrzucania śmieci, ale staje się to naprawdę bezsensowne z tymi dziewięcioma kolorowymi kwadratami dla kolektora G1. Co mają znaczyć? Wątki stają się kwadratami?
Holger
-1

Od Java 9 do Java 15, G1GC jest domyślnym nawet w Javie 15, która dodaje dwa nowe generatory Garbage collectors, ten, który Oracle opracowuje ZGC i implementację Red Hat, którą jest Shenandoah, oba są gotowe do produkcji w Javie 15 września 2020 roku.

chiperortiz
źródło
1. Shenandoah dotyczy tylko OpenJDK, Oracle go nie ma. 2. ZGC nie jest domyślnym GC dla JDK 8, ani 11, który nadal jest potrzebny UnlockExperimentalVMOptions, ale na jdk 15 już nie. 3. ParallelGC jest domyślnym GC dla JDK 8, o co właściwie chodzi tutaj.
Francisco Melo junior
Stwierdzam, że od Java 9 do Java 15 G1GC jest nadal domyślnym ... nawet jeśli niedawno dodano 2 nowe GC ..
chiperortiz
Nie. Powiedziałeś Since Java 8 until Java 15 the G1GC is the default even on Java 15, że sformułowanie jest nieprawidłowe. Domyślnie JDK 8 to Parallel, sam powiedziałeś to jako komentarz, odpowiedź wciąż jest błędna. Shenandoah może być używany w JDK 8 i JDK 11, został z powrotem przeniesiony.
Francisco Melo junior
Tak, przepraszam, naprawdę mam na myśli z Java 9
chiperortiz