[Java] Garbage Collection

thingzoo·2024년 3월 15일
0

Java

목록 보기
3/20
post-thumbnail

가비지 컬렉션(Garbage Collection)

힙 영역에서 사용하지 않는 객체들을 제거하는 작업

  • 이 객체를 제거하는 작업이 필요한 이유는 자바는 개발자가 메모리를 직접 해제해줄 수 없는 언어이기 때문

GC의 동작방식

가장 기본적인 알고리즘인 Serial GC 방식을 알아보자
(좀 더 진보된 GC는 G1 GC, ZGC가 있음)

  • GC는 Minor GC, Major GC로 구분됨
  • Minor GC는 young 영역에서, Major GC는 old 영역에서 일어난다고 정의
  • GC를 수행할 때는 GC를 수행하는 스레드 이외의 스레드는 모두 정지하며, 이를 Stop-the-world라고 함

Minor GC

  • young 영역에서 일어남
  • Eden 영역이 가득 참에서 부터 시작
  • Eden 영역에서 참조가 남아있는 객체를 mark하고 survivor 영역으로 복사하고 비움
  • Survivor 영역도 가득차면 같은 방식으로 다른 Survivor 영역에 복사하고 비움
  • 이를 반복하다 보면 계속 해서 살아남는 객체는 old 영역으로 이동

Major GC

  • old 영역에서 일어남
  • 위와 반대로 삭제되어야 하는 객체를 mark하고 지움(sweep)
  • 메모리는 단편화 된 상태이므로 이를 한 군데에 모아주는 것을 Compaction이라 하며 compact라고 함
  • 그래서 Mark-Sweep-Compact 알고리즘이라고 함
  • 이것이 중요한 이유는 GC 수행시 시스템이 멈추기 때문에 의도치 않은 장애의 원인이 될 수 있음.
  • 따라서 이를 위해 힙 영역을 조정하는 것을 GC 튜닝이라고 하고 JVM 메모리는 절대 마음대로 조정해선 안됨!
profile
공부한 내용은 바로바로 기록하자!

0개의 댓글