본문 바로가기
프로그래밍 언어/Java

GC (Garbage Collection)

by Volka 2024. 2. 25.
  • 메모리 관리 방법 중 하나. JVM의 Heap 영역에서 동적으로 할당했던 메모리 중 필요 없게 된 메모리 객체를 모아 주기적으로 제거하는 프로세스.
  • 장점
    1. 생산성 증가
  • 단점
    1. GC동작 시점 조절 불가. (메모리가 언제 해제되는지 모름)
    2. GC 작동 중 GC관련 스레드를 제외한 모든 스레드 멈춤. 이를 STW(Stop-The-World) 라고 함.
  • GC 대상
    • 가비지 컬렉션은 특정 객체의 도달성, 도달능력(Reachability) 라는 개념을 적용함.
      • Reachable : 객체에 유효한 레퍼런스 존재(참조되고 있는 상태)
      • Unreachable : 객체가 참조되고 있지 않은 상태(GC 대상)
    • JVM 메모리에선 객체들은 실질적으로 Heap 영역에서 생성. Method Area나 Stack Area에서는 Heap Area에 생성된 객체의 주소만 참조하는 형식으로 구성.

기본 알고리즘

  • Mark-Sweep-Compact
    • Mark : Root Space로부터 그래프 순회를 통해 연결된 객체를 찾아내어 마킹
    • Sweep : 참조하고 있지 않은 객체(Unreachable) 들을 Heap에서 제거
    • Compact : Sweep 후 분산된 객체들을 Heap의 시작 주소로 모아 메모리가 할당된 부분과 그렇지 않은 부분으로 압축. (GC 종류에 따라 하지 않는 경우도 있음)
  • Root Space
    • Stack의 로컬 변수
    • Method Area의 Static 변수
    • Native Method Stack의 JNI 참조

JVM의 Heap 구조

  • Young Generation (해당 영역의 GC : Minor GC)
    • 새로운 객체들이 할당되는 영역
    • 구조
      1. Eden : new를 통해 새로 생성된 객체가 위치. → GC 이후 계속 Reachable 객체들을 Survivor 영역으로 보냄.
      2. Survivor 0 / 1 : 최소 1번 이상의 GC 이후 살아남은 객체가 존재하는 영역. 둘 중 하나는 꼭 비어있어야함
  • Old Generation (해당 영역의 GC : Major GC || Full GC)
    • Young 영역에서 Reachable 상태를 유지하여 살아남은 객체가 복사되는 영역.

구성

GC 알고리즘 종류

'프로그래밍 언어 > Java' 카테고리의 다른 글

JVM 메모리 구조  (0) 2024.02.25
JVM(Java Virtual Machine)이란?  (0) 2024.02.25