Default garbage collector for Java 8

JavaGarbage CollectionJava 8

Java Problem Overview


What is the default garbage collector for Java 8?

When I check the JMX Beans, they reveal it to be the parallel collector for the new generation and the old serial collector for the old generation.

Java Solutions


Solution 1 - Java

Default garbage collectors:

  • Java 7 - Parallel GC
  • Java 8 - Parallel GC
  • Java 9 - G1 GC
  • Java 10 - G1 GC

Solution 2 - Java

Selecting the default garbage collector (among other things) is what's called the ergonomics process of the JVM. This process depends on the class of your machine.

  • For server-class machine, defined as a machine with 2 or more physical processors and 2 or more GB of physical memory (regardless of the platform), the default garbage collector is the parallel collector (also known as throughput collector).
  • For client-class machine, defined as a 32-bit platform on Windows or a single-processor machine, the default garbage collector is the serial collector.

Since practically all machines have 2 or more CPU, a machine is practically always considered server-class by the JVM. That's why you will find a lot of references considering the parallel collector to be the default garbage collector.

Solution 3 - Java

Java has four types of garbage collectors(Up to version 10),but after stable release of java 11 , it would be 5 types. These are:-

  1. Serial Garbage Collector- S GC
  2. Parallel Garbage Collector- P GC
  3. CMS Garbage Collector- CMS GC
  4. G1 Garbage Collector- G1 GC
  5. The Z Garbage Collector- ZGC

Default implementations of GC in 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)

More details for ZGC,please visit

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

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

Note: If you want to verify, which GC is currently being used by JVM,you can go for following command to show default GC:-

$ java -XX:+PrintCommandLineFlags -version 

If you want to set GC according to your need, you can do this by following command. Here I am going to set G1 GC as default GC.

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

enter image description here

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

Solution 4 - Java

Since Java 9 until Java 15 the G1GC is the default even on Java 15 which adds two new generation Garbage collectors the one that Oracle develop ZGC and a red hat implementation which is Shenandoah both are production ready in Java 15 september of 2020. ZGC is available on OPEN JDK https://wiki.openjdk.java.net/display/zgc/Main

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionCode JunkieView Question on Stackoverflow
Solution 1 - Javax4444View Answer on Stackoverflow
Solution 2 - JavaTunakiView Answer on Stackoverflow
Solution 3 - JavaBrajeshView Answer on Stackoverflow
Solution 4 - JavachiperortizView Answer on Stackoverflow