HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
📝
남득윤 학습 저장소
/
🤖
JVM Internal
/
🚯
Java Garbage Collection
🚯

Java Garbage Collection

Terminologies

GC - Garbage Collection 쓰레기 수집
메모리 관리 기법 중 하나로, 동적으로 할당했던 메모리 영역 중 필요없게 된 영역을 해제하는 기능. 자바의 경우 힙에 할당된 메모리가 가비지 컬렉션의 대상이 된다.
메모리 관리 기법 중 하나로, 동적으로 할당했던 메모리 영역 중 필요없게 된 영역을 해제하는 기능. 자바의 경우 힙에 할당된 메모리가 가비지 컬렉션의 대상이 된다.
 
Stop-the-world
GC을 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것
stop-the-world가 발생하면 GC를 실행하는 쓰레드를 제외한 나머지 쓰레드는 모두 작업을 멈춤
GC을 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것 stop-the-world가 발생하면 GC를 실행하는 쓰레드를 제외한 나머지 쓰레드는 모두 작업을 멈춤
 
❕
Note!) GC도 그냥 JVM이 실행하는 쓰레드 중 하나임
 
GC 튜닝
GC는 순수 오버헤드이다. GC의 알고리즘 및 파라미터를 조절하는 GC 튜닝을 통해  stop-the-world 시간을 줄여 애플리케이션의 성능을 높일 수 있다.
GC는 순수 오버헤드이다. GC의 알고리즘 및 파라미터를 조절하는 GC 튜닝을 통해 stop-the-world 시간을 줄여 애플리케이션의 성능을 높일 수 있다.

GC Algorithm - 매우 많다.

  • Reference counting
    • notion image
  • Mark and Sweep - JVM의 동작 방식
    • notion image
      Mark/ Sweep/Compaction
      Mark reachable references → Sweep unrachable references (→ compaction)
ㅤ
Mark and Sweep
Reference Counting
순환 참조
해결
미해결
실행 시점
의도적으로 실행 시점을 정해야 함
객체의 reference count가 0 이 되는 순간
 

JVM GC

  • JVM Root Set
    • notion image
      유효한 최초의 참조
      유효한 최초의 참조
    • Java 스택, 즉 Java 메서드 실행 시에 사용하는 지역 변수와 파라미터들에 의한 참조
    • 네이티브 스택, 즉 JNI(Java Native Interface)에 의해 생성된 객체에 대한 참조
    • 메서드 영역의 정적 변수에 의한 참조
 
  • GC의 대상이 되는 JVM의 Heap 구조
    • ‘weak generational hypothesis’에 따라 설계된 HotSpot JVM 의 구조
      ‘weak generational hypothesis’에 따라 설계된 HotSpot JVM 의 구조
    • Weak general hypothesis
      • 대부분의 객체는 금방 접근 불가능 상태(unreachable)가 된다.
      • 오래된 객체에서 젊은 객체로의 참조는 아주 적게 존재한다.
    • Young generation → Minor GC
    • Old generation → Major GC
    •