가비지 컬렉터(GC) 종류

업데이트:

1) Serial GC
: GC를 처리하는 쓰레드가 하나인 Single Thread.JDK 5,6에서 사용되며, 싱글 스레드로 수행되는 가장 간단한 방식의 GC.

  • 싱글 스레드로 작업이 수행되기 때문에 작업시간이 길다
  • 단일 스레드 환경 및 소규모 응용 프로그램을 위한 간단한 GC
  • Mark-Sweep-Compact알고리즘을 사용
    -> mark- Heap의 Old 영역에서 GC대상외의 것들을 표시(마킹)하는 단계
    -> sweep- 마킹 되어있지 않은 객체들을 제거
    -> compact- heap의 앞부분부터 객체들이 삭제되고 생긴 살아남은 객체들 사이의 비워진 공간이 생기지 않게 다시 채워넣음.

2)Parallel GC
:JDK 8의 디폴트 방식으로 멀티 스레드 GC작업 수행.

두가지 방식 존재

  • Low-pause: GC가 일어날 때 어플리케이션이 멈추는 현상을 최소화
  • Throughput: Parallel GC는 마이너 GC가 발생하였을 때 되도록 신속하게 수행

3) Concurrent GC

  • Low-pause와 유사하며 응용 프로그램 실행 중 GC 작업
  • 동작 중지 최소화

4) Incremental GC(Train GC)

  • Concurrent GC와 유사하나 Minor GC발생 시 Full GC를 일부 병행
  • 경우에 따라 오히려 더 느려지는 부작용

Minor GC

young 영역의 GC.

  • Young 영역에서 다시 eden영역과 두개의 survivor 영역(S0,S1)으로 나눕니다.
    새로 생성된 객체는 Eden 영역에 할당되며, Eden 영역이 가득차면 Minor GC가 발생합니다.

1.Minor GC는 Eden 영역과 한 Survivor(S0과 S1중 하나)에서 살아남은 객체들을 다른 영역(나머지 S0,S1) 이 과정에서 더 이상 참조되지 않는 개체들은 제거.
2. 살아남은 객체 중 생성된지 특정시간이 지나면 Old 영역으로 이동
3. 빠르게 수행되지만, 해당 영역은 스레드가 일시 중지됨.

Full GC

Old 영역의 GC.

  • 힙의 모든 부분을 대상으로 함.
  • 상대적으로 느리고,실행 중 스레드 중지.
  1. 힙 전체를 검사하여, 사용되지 않는 객체를 제거.
  2. Minor GC보다 훨씬 많은 시간 소요. Youn과 Old 영역 모두 처리.

JVM에서 자동으로 관리되지만, 애플리케이션의 성능과 메모리 사용 효율설에 중요한 영향을 미침.

참고 레퍼런스)

댓글남기기