JAVA

[JAVA] GC의 종류

집한구석 2021. 5. 23. 15:47
728x90

GC종류를 명확하게 설명을 못해서 정리


GC종류

  • Serial GC
  • Parallel GC
  • CMS GC
  • G1 GC

Serial GC

-XX:+UseSerialGC
  • 32비트 JVM에서 돌아가는 싱글쓰레드 어플리케이션에서 사용
  • MinorGC, MajorGC 모두 순차적으로 수행 (싱글쓰레드 방식)
  • Deletion and Compacting 수행

Parallel GC (Throughput Collector)

-XX:+UseParallelGC
  • 64비트 JVM에서 돌아가는 멀티 CPU, 유닉스 머신에서 사용
  • Default로 young generation에서만 멀티스레드를 활용, 옵션을 통해 old generation에서도 멀티스레딩 활용 가능
  • 많은 CPU를 사용하기 때문에 GC의 부하를 줄이고, 애플리케이션 처리량을 증가시킬 수 있음
  • JAVA 8까지 Default로 설정되어 있음

CMS (Concurrent Mark & Sweep GC) GC

-XX:+UseConcMarkSweepGC
  • GC 작업을 애플리케이션 스레드와 동시 수행함
  • STOP THE WORLD 시간이 매우 짧고, 다른 GC방식보다 메모리와 CPU를 더 많이 사용함
  • low-latency collector로도 알려져 있으며, 힙 메모리 영역의 크기가 클 때 적합
  • Compaction 단계가 기본적으로 제공되지 않음

G1 GC

-XX:+UseG1GC
  • 기존 Young, Old영역 개념이 아닌 Resion 개념을 도입한 GC 방식
  • 하나이상의 Resion 영역에서 객체를 복사하여 다른 Resion으로 이동시키는 방식
  • CMS 대체하기 위하여 만들어짐
  • Heap 영역에 전역적으로 마킹하고, 가장 많은 공간이 있는 곳부터 메모리 회수를 진행함
  • JAVA 7부터 사용이 가능하며, JAVA 9에는 Default로 설정이 되어 있음

'JAVA' 카테고리의 다른 글

[JAVA] JVM 구조  (0) 2021.06.03
[JAVA] Enum  (0) 2021.06.02
[JAVA] 상태패턴  (0) 2021.05.21
[JAVA] Builder 패턴  (0) 2021.05.16
[JAVA] 상속 / 컴포지션  (0) 2021.05.15