가비지 컬렉션

minisoo·2023년 11월 27일
0

가비지 컬렉션

  • JVM의 Heap영역에서 동적으로 할당했던 메모리 중 필요없게 된 메모리 객체를 주기적으로 모아 제거하는 프로세스
  • 사용 가능한 메모리 영역이 없는데 계속 메모리를 할당하려고 하면, OutOfMemoryError가 발생할 수 있다
  • 어떤 GC알고리즘을 사용하더라도 JVM이 GC를 실행하기 위해 애플리케이션 실행을 멈추게 되는데, 적절한 빈도의 GC가 실행되도록 하여 Stop-the-World 시간을 줄이는 것이 중요하다

JVM 메모리 구조와 Heap 구조

효율적인 메모리 관리를 위해, 객체의 생존 기간에 따라 물리적인 Heap 영역을 나누게 되었다

Young 영역

  • 새롭게 생성된 객체가 할당되는 영역
  • Minor GC라고 부른다

Old 영역

  • Young영역에서 Reachable상태를 유지하여 살아남은 객체가 복사되는 영역
  • Major GC라고 부른다

Minor GC 과정

  • 생성된 객체 Eden 영역에 위치
  • Eden 영역이 꽉차면 Minor GC가 발생
  • Eden 영역에서 참조가 남아있는 객체를 mark하고 survivor 영역으로 복사
  • Survivor 영역도 가득차면 같은 방식으로 다른 survivor 영역에 복사하고 비움
  • 이를 반복하다 보면 계속 살아남는 객체는 old 영역으로 이동

Major GC 과정

  • Old 영역에 할당된 메모리가 허용치를 넘게 되면, 참조되지 않는 객체들을 한꺼번에 삭제
  • Minor GC보다 시간이 오래걸림
profile
코딩하는 돌멩이 👻

0개의 댓글