[Java] Garbage Collection 이란 무엇인가요?

orca·2023년 11월 19일

CS

목록 보기
8/46

Java에서 객체는 힙 영역에 저장됩니다. Garbage Collection 이란 힙 영역에서 사용하지 않는 객체를 찾아 삭제하는 것을 의미합니다.

Garbage Collection 단계

Mark

  • GC 식별기가 객체 그래프를 탐색하며 활성 객체 체크
  • GC 식별기가 접근할 수 없는 객체는 죽은 객체로, GC의 대상

Sweep

  • 죽은 객체를 메모리에서 제거

Compact

  • 활성 객체가 힙의 연속된 공간에 있을 수 있게 메모리 압축

Generational Garbage Collection

  • java GC는 객체를 세대 별로 분류함
    ➡️ 세대에 따라 다른 GC 전략을 사용하기 위해
    • Minor GC for young generation
    • Major GC for old generation
  • 세대별 힙 분류
    • young generation
      • eden : 새로 생성한 객체가 위치하는 곳
      • survivor : s0 영역과 s1 영역 두개의 공간으로 구분
    • old generation
      • tenured

Minor GC

  • young generation 에 대한 GC
  • eden 공간이 다 차면 Minor GC 수행
  • s0, s1이 번갈아 from space, to space가 됨

1. eden 공간에 활성 객체와 죽은 객체 존재

2. 첫번째 Minor GC 발생

  • eden
    • 활성 객체 S0로 이동
    • 죽은 객체 제거

3. 두번째 Minor GC 발생

  • eden
    • 활성 객체 S1로 이동
    • 죽은 객체 제거
  • S0
    • 활성 객체 수명 증가 및 S1로 이동
    • 죽은 객체 제거

4. 세번째 Minor GC 발생

  • eden
    • 활성 객체 S0로 이동
    • 죽은 객체 제거
  • S1
    • 활성 객체 수명 증가 및 S0로 이동
    • 죽은 객체 제거

5. n번째 Minor GC 발생

  • eden
    • 활성 객체 S0로 이동
    • 죽은 객체 제거
  • S1
    • 활성 객체 수명 증가 및 S0로 이동
    • 8살 활성 객체는 tenured로 이동
    • 죽은 객체 제거

Major GC

  • old generation 에 대한 GC
  • tenured 공간이 다 차면 Major GC 수행
  • 채택한 GC 알고리즘에 따라 방식이 달라짐

Java Garbage Collection
Garbage Collection in Java – What is GC and How it Works in the JVM
Java Garbage Collection Basics

0개의 댓글