반응형
JVM은 메모리를 자동으로 관리해주기 때문에 개발자들이 걱정을 조금이나마 덜고 개발할 수 있는 장점이 있었습니다.
하지만 GC를 수행하는 과정에서 Stop The World가 발생하게 되고 이 과정에서 애플리케이션이 중지되는 문제가 있습니다.
또한 자바가 발전하며 Heap사이즈가 커지며 지연현상이 커지게 되었고 이를 위한 다양한 GC 알고리즘들이 만들어지게 되었습니다. 지금부터 GC 알고리즘에 대해 알아보겠습니다.
1. Serial GC(잘 쓰이지 않음)
- GC를 싱글스레드로 진행하기 때문에 Stop-The-Word의 시간이 길어진다.
- Old 영역에서 Mark Sweep에 Compact 작업을 추가적으로 실행한다.
- CPU 코어가 1개일 때 사용하기 위해 개발되었다.
java -XX:+UseSerialGC -jar Application.java
2. Parallel GC
- Serial GC와 기본적 알고리즘은 같으나 GC를 멀티 쓰레드로 처리하기 때문에 속도가 더 빠르다.
- 옵션을 통해 최대 지연 시간 또는 GC를 수행할 스레드 수를 설정할 수 있다.
- 자바 8까지 default로 사용
java -XX:+UseParallelGC -jar Application.java
-XX:ParallelGCThreads=N //사용할 쓰레드의 갯수
3. Parallel Old GC
- parallel GC와 비교해 Old 영역의 알고리즘만 다르다.
- Mark-Summary-Compact 방식을 이용한다(Old 영역도 멀티 쓰레드 처리)
java -XX:+UseParallelOldGC -jar Application.java
4. CMS GC(14부터 중지)
- 애플리케이션 쓰레드와 GC 쓰레드가 동시에 실행된다.
- GC 과정이 복잡해지기 때문에 CPU 사용량이 높다.
- Compaction단계를 수행하지 않아 메모리 파편화 문제가 있다.
java -XX:+UseConcMarkSweepGC -jar Application.java
5. G1(Garbage First) GC
- Heap을 동일 크기로 나누고 각 영역은 Eden, Survivor, Old 영역 중 하나로 지정된다.
- 메모리가 많이 차있는 지역에 우선적으로 GC를 수행한다.
- 객체들의 생명주기가 순차적으로 이동하지 않고 효율적이라 생각하는 위치로 객체를 재할당한다.
java -XX:+UseG1GC -jar Application.java
6. ZGC
- 짧은 정지 시간을 제공해 실시간 응답이 중요한 애플리케이션에 적합하다.
- 최대 수까지 힙 크기를 지원해 대규모 데이터 처리 애플리케이션에 적합하다.
- 가비지 컬렉션 작업을 애플리케이션 스레드와 병행해서 수행해 정지 시간을 최소화한다.
java -XX:+UseZGC -jar Application.jar
참고
반응형
'JAVA' 카테고리의 다른 글
정적 팩토리 메서드란? (0) | 2024.06.10 |
---|---|
[JAVA] 불변객체란? (0) | 2024.06.09 |
[JAVA] 가비지 컬렉션이란? (Garbage Collection) 1편 (0) | 2024.06.04 |
[JAVA] Call by Value, Call by Reference (0) | 2024.06.03 |
[JAVA] 래퍼 클래스(Wrapper Class)란? (0) | 2024.05.31 |