Home [Java] Garbage Collection
Post
Cancel

[Java] Garbage Collection

Garbage Collection

Garbage Collection(GC)은 JVM 상에서 더 이상 사용되지 않는 데이터가 할당되어 있는 메모리를 해제시켜주는 장치입니다. 또한 자동으로 동작하기 때문에 개발자가 메모리 관리를 할 필요가 없습니다. 주로 관리하는 대상은 Heap 영역 내의 객체 중에서 참조되지 않은 데이터입니다.

참조되어 있는지에 대한 개념을 reachability라 하고, 참조되고 있으면 reachable, 참조되고 있지 않으면 unreachable이라고 합니다. 또한 reachable로 인식되게 만들어주는 JVM Runtime Area들을 root set이라고 합니다.

GC는 unreachable한 객체들을 garbage라고 인식합니다.

GC

Heap 영역 내부의 객체들은 Method Area, Stack, Native Stack에서 참조되면 reachable로 판정됩니다. 또한 reachable한 객체가 참조하고 있는 다른 객체 역시 reachable이 됩니다.

unreachable로 판정된 객체들은 GC의 대상이 됩니다.


GC Algorithm

GC에 사용되는 알고리즘을 살펴보기 전에 Stop-The-World와 Weak Generational Hypothesis 개념을 알아야 합니다.

  • Stop-The-World
    • JVM은 GC를 통해 여유 메모리를 확보할 수 있음
    • 그러나 GC가 너무 빈번하게 발생하면 프로그램의 성능을 저하시킴
    • GC가 일어나면 GC를 담당하는 스레드를 제외한 모든 스레드는 일시적으로 작동을 멈추는데 이를 Stop-The-World 현상이라고 함
    • 모든 스레드가 정지되기 때문에 작업이 실행되지 않고 성능이 저하됨
    • 따라서 적절한 빈도의 GC가 실행되도록 하여, Stop-The-World 시간을 줄여야 함
  • Weak Generational Hypothesis
    • GC를 성공적으로 수행하는 알고리즘을 설계하기 위한 가설
    • 대부분의 객체는 빠르게 unreachable한 상태로 전환된다고 가정함
    • Heap의 메모리 영역 기준으로 오래된 영역에서 최신 영역으로의 참조 방향은 적게 존재한다고 가정함

Mark And Sweep Algorithm

  • 가장 기본적인 알고리즘으로, root set으로부터 출발하여 참조되는 객체들을 마크함(Mark Phase)
  • 이후에 마크되지 않은 객체들을 추적하여 삭제함(Sweep Phase)
  • 메모리가 Fragmentation, 단편화되는 단점이 있음
  • 메모리 단편화는, 메모리가 정렬되지 않은 조각으로 나뉘어져 추가적으로 메모리 할당이 되기 힘든 상태를 의미함
  • 이를 해결하기 위한 알고리즘이 Mark And Compact Algorithm Sweep

Mark And Compact Algorithm

  • 참조되는 객체들에 대해서 마크함
  • 참조되지 않은 객체는 삭제함
  • 이후에 메모리를 정리하여 메모리 단편화를 해결함 Compact

Minor GC와 Major GC

GC는 일어나는 시점에 따라서 크게 Minor GC와 Major GC로 나눌 수 있습니다.

Minor GC

  • JVM의 Young 영역에서 일어나는 GC
  • Young에 위치한 각각의 영역이 가득 차게 되어 더 이상 새로운 객체를 생성할 수 없을 때 발생
  • 마크된(reachable) 영역이 다음 영역으로 복사되면서 이루어지며, 삭제는 일어나지 않음
  • Stop-The-World 시간이 매우 짧아 이루어지지 않는다고 간주하며, Major GC에 비해 속도가 빠름

Major GC

  • JVM의 Old 영역에서 일어나는 GC
  • Stop-The-World 시간이 길며, 자바 프로그램 실행에 영향을 줌
  • 이를 해결하기 위해 Mark And Compact Algorithm을 기반한 여러 GC 방식들이 선택 및 적용됨 Minor&Major

참고링크

JVM에 관하여 - Part 4, Garbage Collection 기초

This post is licensed under CC BY 4.0 by the author.