Garbage Collector

jyKim·2023년 1월 27일
0

Java

목록 보기
2/3

Garbage Collection

  • 자바의 메모리 관리 방법 중 하나로, JVM의 Heap 영역에서 동적으로 할당한 메모리 영역 중 필요 없게 된 메모리 영역을 주기적으로 삭제하는 프로세스를 말한다.
  • 개발자 입장에서 메모리 관리, 메모리 누수 문제에 대하여 처리해주기 때문에, 오롯이 개발에만 집중할 수 있다는 장점이 있다.
  • 동시에 개발자가 메모리가 언제 해제되는지 정확하게 알 수 없고, GC가 동작하는 동안에는 다른 모든 동작이 정지하기 때문에 오버헤드가 발생하는 단점이 있다.
  • GC 대상

  • 객채의 상태
    1. Reachable → 객체가 참조되고 있는 상태
    2. Unreachable → 객체가 참조되지 않는 상태(GC 대상)

Heap Area

  • Young / Old 2개의 영역으로 나누는 전제 조건
    • 대부분의 객체는 금방 접근 불가 상태(Unreachable)가 된다.
    • 오래된 객체에서 젊은 객체로의 참조는 아주 적게 존재한다.
  • Young Generation
    • 자바 객체가 생성되자마자 저장되고, 생긴지 얼마 안되는 객체가 저장되는 공간
    • Heap 영역에 객체가 생성되면 최초 Eden 영역에 할당되며, 이 영역에 데이터가 쌓일 경우 참조 정도에 따라 Survivor의 빈 공간으로 이동되거나 회수된다.
    • 대부분의 객체는 Young 영역에서 생성되었다가 사라진다.
    • Young Generation 에서의 GC를 Minor GC 라고 한다.
  • Old Generation
    • Young Generation 영역이 차게 되면 다시 참조 정도에 따라 Old 영역으로 이동되거나 회수된다.
    • Rechable 상태를 유지하며, Young 영역에서 살아남은 객체가 복사된다.
    • Old 영역 역시 임계점이 넘을 경우 GC가 실행되며, 이때 GC를 실행하는 쓰레드를 제외한 모든 스레드는 작업을 멈추게 된다.
    • 이를 Stop-the-World라고 한다.
    • Old Generation에서의 GC를 Major GC 혹은 Full GC라고 한다.

Reference

profile
백엔드애옹

0개의 댓글