-
[Java] 버전별 GC 목록 ( OpenJDK )Computer Science/Java 2024. 2. 7. 17:55
- GC 확인 방법
- Java8의 GC
- Java11의 GC
- Java17의 GC
- Java21의 GC
GC 확인 방법
현재 Default 로 적용된 GC를 확인하는 방법은 크게 2가지로 다음과 같습니다.
1. 적용중인 Flag를 확인하는 방법
java -XX:+PrintCommandLineFlags -version
해당 명령어로 현재 적용중인 Flag들과 버전을 같이 확인 할 수 있습니다.
위와 같이 결과가 나오는데 Java8의 경우 ParallelGC를 사용하는 것으로 확인됩니다.
2. 전체 Flag를 확인하는 방법
java -XX:+PrintFlagsFinal -version
해당 명령어로 사용 가능한 Flag들과 현재 그 값들을 확인할 수 있습니다.
grep 명령어와 함께 사용하여 GC 목록들만 뽑아서 확인하면 다음과 같습니다.
Java8 에서의 GC
해당 이미지를 잘 살펴보면 Java8에서는 크게 5가지의 GC를 확인할 수 있습니다.
- ConcMarkSweepGC & ParNewGC
- G1GC
- ParallelGC
- ParallelOldGC
- SerialGC
Default GC는 ParallelGC인데 자세히 확인해보시면 ParallelGC와 ParallelOldGC가 동시에 활성화 되있는 것을 확인 할 수 있습니다.
https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html
찾은 것이 비록 Oracle 이지만 ParallelGC 옵션은 추가로 설정을 하지 않는 이상 ParallelOldGC 옵션을 활성화 시키며 ParallelOldGC는 ParallelGC를 자동으로 활성화 시킨다고 되어있습니다.
즉 ParallelGC만을 활성화는 가능하지만 ParallelOldGC만 활성화는 불가능합니다.
또한 ConcMarkSweepGC는 활성화 시 ParNewGC가 자동으로 활성화 되고 역으로도 마찬가지라고 설명이 되어있습니다.
Java11에서의 GC
Java11에서도 5개의 GC가 확인됩니다.
- ConcMarkSweepGC
- G1GC
- ParallelGC
- ParallelOldGC
- SerialGC
Java11에서는 Default GC가 G1GC이며 ParNewGC가 사라졌습니다.
추가로 Oracle 에서는 ZGC도 확인이 됩니다.
Java17에서의 GC
Java17에서부터는 ZGC와 ShenandoahGC가 보이기 시작합니다.
Default GC는 그대로 G1GC이며 ParallelOldGC가 ParallelGC로 병합되어서 따로 존재하지 않습니다.
- G1GC
- ParallelGC
- SerialGC
- ShenandoahGC
- ZGC
다만 Oracle에서는 ShenandoahGC가 확인되지 않는데 이는 Openjdk 홈페이지에서도 확인이 가능합니다.
https://wiki.openjdk.org/display/shenandoah/Main
Java21에서의 GC
Java21에서도 동일하게 5개의 GC가 확인되며 Default GC 또한 동일하게 G1GC입니다.
- G1GC
- ParallelGC
- SerialGC
- ShenandoahGC
- ZGC
'Computer Science > Java' 카테고리의 다른 글
[Java] GC 종류별 메모리 상황에 따른 테스트 (0) 2024.02.08 [JAVA] JVM 동작 방식 (1) 2024.02.06 Mac 터미널 java version 임시 변경 (0) 2022.11.10 SOLID (0) 2022.10.05 open-jdk-17 설치. (0) 2022.07.27