Computer Science/Java

[Java] 버전별 GC 목록 ( OpenJDK )

imygnam 2024. 2. 7. 17:55
  1. GC 확인 방법
  2. Java8의 GC
  3. Java11의 GC
  4. Java17의 GC
  5. Java21의 GC

 

GC 확인 방법

현재 Default 로 적용된 GC를 확인하는 방법은 크게 2가지로 다음과 같습니다.

1. 적용중인 Flag를 확인하는 방법

java -XX:+PrintCommandLineFlags -version

해당 명령어로 현재 적용중인 Flag들과 버전을 같이 확인 할 수 있습니다.

Java8에서의 결과

위와 같이 결과가 나오는데 Java8의 경우 ParallelGC를 사용하는 것으로 확인됩니다.

 

2. 전체 Flag를 확인하는 방법

java -XX:+PrintFlagsFinal -version

해당 명령어로 사용 가능한 Flag들과 현재 그 값들을 확인할 수 있습니다. 

grep 명령어와 함께 사용하여 GC 목록들만 뽑아서 확인하면 다음과 같습니다.

Java8 의 GC


Java8 에서의 GC

Java8 의 GC

해당 이미지를 잘 살펴보면 Java8에서는 크게 5가지의 GC를 확인할 수 있습니다.

  1. ConcMarkSweepGC & ParNewGC
  2. G1GC
  3. ParallelGC
  4. ParallelOldGC
  5. SerialGC

Default GC는 ParallelGC인데 자세히 확인해보시면 ParallelGC와 ParallelOldGC가 동시에 활성화 되있는 것을 확인 할 수 있습니다.

https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html

 

java

Large Pages Also known as huge pages, large pages are memory pages that are significantly larger than the standard memory page size (which varies depending on the processor and operating system). Large pages optimize processor Translation-Lookaside Buffers

docs.oracle.com

찾은 것이 비록 Oracle 이지만 ParallelGC 옵션은 추가로 설정을 하지 않는 이상 ParallelOldGC 옵션을 활성화 시키며 ParallelOldGC는 ParallelGC를 자동으로 활성화 시킨다고 되어있습니다.

즉 ParallelGC만을 활성화는 가능하지만 ParallelOldGC만 활성화는 불가능합니다.

ParallelGC 설명

 

또한 ConcMarkSweepGC는 활성화 시 ParNewGC가 자동으로 활성화 되고 역으로도 마찬가지라고 설명이 되어있습니다.


Java11에서의 GC

Java11 의 GC

Java11에서도 5개의 GC가 확인됩니다.

  1. ConcMarkSweepGC
  2. G1GC
  3. ParallelGC
  4. ParallelOldGC
  5. SerialGC

Java11에서는 Default GC가 G1GC이며 ParNewGC가 사라졌습니다.

추가로 Oracle 에서는 ZGC도 확인이 됩니다.

Oracle Java11에서 ZGC

https://docs.oracle.com/en/java/javase/11/gctuning/available-collectors.html#GUID-F215A508-9E58-40B4-90A5-74E29BF3BD3C

 

HotSpot Virtual Machine Garbage Collection Tuning Guide

The discussion to this point has been about the serial collector. The Java HotSpot VM includes three different types of collectors, each with different performance characteristics.

docs.oracle.com


Java17에서의 GC

Java17의 GC

Java17에서부터는 ZGC와 ShenandoahGC가 보이기 시작합니다.

Default GC는 그대로 G1GC이며 ParallelOldGC가 ParallelGC로 병합되어서 따로 존재하지 않습니다.

  1. G1GC
  2. ParallelGC
  3. SerialGC
  4. ShenandoahGC
  5. ZGC

다만 Oracle에서는 ShenandoahGC가 확인되지 않는데 이는 Openjdk 홈페이지에서도 확인이 가능합니다.

ShenandoahGC의 Releases

https://docs.oracle.com/en/java/javase/17/gctuning/available-collectors.html#GUID-F215A508-9E58-40B4-90A5-74E29BF3BD3C

 

HotSpot Virtual Machine Garbage Collection Tuning Guide

The discussion to this point has been about the serial collector. The Java HotSpot VM includes three different types of collectors, each with different performance characteristics.

docs.oracle.com

https://wiki.openjdk.org/display/shenandoah/Main

 

Main - Main - OpenJDK Wiki

 

wiki.openjdk.org


Java21에서의 GC

Java21의 GC

Java21에서도 동일하게 5개의 GC가 확인되며 Default GC 또한 동일하게 G1GC입니다.

  1. G1GC
  2. ParallelGC
  3. SerialGC
  4. ShenandoahGC
  5. ZGC