GC 동작원리

업데이트:

G.C 동작원리

GC의 동작원리와 내부 구조에 대해 알아보자.

GC (Garbage Collector)

  • 가비지 컬렉터
  • 메모리 관리를 위해 힙영역에서 더이상 사용하지 않는 객체를 메모리에서 제거하는 것

GC 동작원리

  • JVM에서 GC의 스케줄링을 담당하여 Java 개발자에게 메모리 관리의 부담을 덜어준다.
  • GC는 background에서 데몬 쓰레드로 돌며 더이상 사용되지 않는 객체들을 메모리에서 제거하여 효율적인 메모리 사용을 돕는다.
  • 어떻게 더이상 사용되지 않는 객체로 인식할까?
  • 객체는 힙 영역에 저장되고 스택 영역에 이를 가리키는 주소값이 저장되는데 참조되지 않는(자신을 가리키는 포인터가 없는, unreachable) 객체를 메모리에서 제거한다.


GC

GC 물리적 공간 (Heap 영역)

  1. Young generation
    1. Eden
      • 새로 생성된 객체들이 위치
      • Minor GC 발생
    2. Survivor 1,2
      • Eden 영역에서 GC 실행 후 살아남은 객체들이 위치
      • Minor GC 발생
  2. Old generation
    • Suvivor 영역에서 여러번의 GC 후 살아남은 객체들이 위치
    • Major GC 또는 Full GC 발생

STW

  • Old 영역이 가득차면 major GC 또는 Full GC가 동작하는데 이때 STW 상태가 되므로 이를 최소화 하는 것이 중요하다.

  • STW(Stop-The-World)

    • GC 처리하는 동안 Java의 프로세스가 모두 멈춰버리는 현상이다.

GC 처리방식

  1. Serial GC
    • Mark-sweep-compact 알고리즘
    • 적은 메모리와 CPU 코어 갯수가 적을 때 적합하다.
  2. Paraller GC
    • Serial GC와 알고리즘은 같지만 GC를 처리하는 Thread가 여러개이다.
    • 메모리와 코어가 충분할 때 적합하다.
  3. Paraller Old GC
    • Paraller GC에서 Old GC 알고리즘을 개선한 버전이다.


References

댓글남기기