hayu's 개발 일지

[TIL]240502 Garbage Collection 본문

기술/java

[TIL]240502 Garbage Collection

hayu00 2024. 5. 2. 21:08

Garbage Collection

  • 자바의 메모리 관리 방법 중 하나로 JVM(자바 가상 머신)의 Heap 영역에서 동적으로 할당했던 메모리 중 필요없게 된 메모리 객체(garbage)를 모아 주기적으로 제거하는 프로세스를 말한다.

단점

  • 메모리가 언제 해제되는지 정확하게 알 수 없어 제어하기 힘들다.
  • 가비지 걸렉션(GC)이 동작하는 동안에는 다른 동작을 멈추기 때문에 오버헤드가 발생되는 문제가 있다. STW (Stop The World)

STW (Stop The World)

  • GC를 수행하기 위해 JVM이 프로그램 실행을 멈추는 현상을 의미한다.
  • GC가 작동하는 동안 GC 관련 쓰레드를 제외한 모든 쓰레드는 멈추게 되어 서비스 이용에 차질이 생길 수 있다.

→ 이 시간을 최소화 시키는 것이 쟁점이다.

  • GC 가 너무 자주 실행되면 소프트웨어 성능 하락의 문제가 되기도 한다. / 익스플로러는 이 가비지 컬렉션을 너무 자주 실행하여 성능 문제를 일으키는 것으로 악명이 높았다.

가비지 컬렉션 대상

  • 가비지 컬렉션은 특정 객체가 가비지인지 아닌지 판단하기 위해 도달성, 도달능력(Reachability) 이라는 개념을 적용한다.
  • 객체에 레퍼런스가 있다면 Reachable로 구분되고, 객체에 유효한 레퍼런스가 없으면 Unreachable로 구분해버리고 수거해버린다.

Reachable : 객체가 참조되고 있는 상태 Unreachable  : 객체가 참조되고 있지 않은 상태 (GC의 대상이 됨)

  • JVM 메모리에서 객체들은 실질적으로 힙영역에서 생성되고, 메서드 영역이나 스택 영역에서는 입 영역에 생성된 객체의 주소만 참조하는 형식으로 구성된다.
  • 이렇게 생성된 힙 영역의 객체들이 특정 이벤트들로 인해여 힙 영역 객체의 메모리 주소를 가지고 있는 참조 변수가 삭제되는 현상이 발생하면, 참조하고 있지 않은 객체들이 발생한다.

→ 이 객체들이 가비지 컬렉터의 대상이 된다.