IT/CS 공부

[CS] 자바의 GC(Garbage Collection)

박소민 2025. 6. 9. 09:37
자바의 GC(Garbage Collection)
  • JVM이 힙 메모리 상에서 더 이상 사용되지 않는 객체를 자동으로 제거하는 기능
  • GC의 대상이 되는 객체를 판단하기 위해 JVM은 도달 가능성(Reachability) 을 확인

 

JVM 메모리 구조
📦 JVM 메모리 구조

┌────────────────────┐
│ 메서드(Method) 영역 ─ 클래스 정보, static 변수 등     │
└────────────────────┘
        ▲
        │
┌────────────────────┐
│ 스택(Stack) ─ 지역 변수, 메서드 호출 정보         │
└────────────────────┘
        ▲
        │
┌────────────────────┐
│ 힙(Heap) ─ 객체들이 생성되는 공간               │
└────────────────────┘

 

GC 대상 판단 기준: 도달 가능성
  • JVM은 GC 수행 시 특정 객체에 여전히 접근할 수 있는지를 기준으로 살아있는 객체와 제거할 객체를 판단
  • GC의 시작점은 Root Set / 아래 3가지를 포함한다
    • 스택 영역에 존재하는 지역 변수
    • static 변수
    • JNI를 통해 참조되는 객체
  • GC 판단 과정
    • Root Set으로부터 참조를 따라가며 도달할 수 있는 객체는 사용 중인 객체로 간주
    • 이 경로에서 벗어난 객체는 더 이상 사용되지 않는 것으로 판단하고 GC 대상이 된다.
# GC 판단 과정
		Root Set
                    │
        ┌───────────┼────────────┐
        ▼           ▼            ▼
     Stack       Static        Native
     Frame       Field         Method
      │            │             │
      ▼            ▼             ▼
     [A] ───▶ [B] ───▶ [C]      [D]

           [X]      ← 도달 불가 → GC 대상!
           
# Root Set에서 참조되는 A → B → C는 도달 가능하므로 GC 대상 아님
# X는 어떤 참조도 받지 않으므로 GC 대상

 


 

개발자가 GC에 관여할 수 있는 방법
  • 자바는 java.lang.ref 패키지를 통해 개발자가 GC 대상 판단에 일부 관여할 수 있는 기능을 제공
    • SoftReferenceWeakReference
  • SoftReference
    • 메모리가 충분하면 수집되지 않음
    • 메모리가 부족할 경우 GC 대상이 됨
    • 캐시 구현 등에 사용
SoftReference<Data> sr = new SoftReference<>(new Data());
  • WeakReference
    • 참조가 없다면 즉시 GC 대상이 됨
    • 메모리 누수 방지에 적합
WeakReference<Data> wr = new WeakReference<>(new Data());