본문 바로가기
Java/Servlet/JSP

Java GC 구조

by ahnshy 2024. 8. 11.

Java GC 구조

  • Java7부터 공식적으로 사용할 수 있는 GI(Garbage First)라는 가비지 컬렉터를 제외한 나머지 JVM은 다음과 같이 영역을 나누어 힙이라는 공간에 객체들을 관리한다.
  • Young 영역은 젊은 객체들이 존재하며, Old 영역에는 늙은 객체들이 자리잡는다. Perm 영역에는 클래스나 메소드에 대한 정보가 쌓인다.
  • Young 영역은 Eden과 Survivor 영역으로 나뉘는데, 객체를 생성하자마자 저장되는 장소는 Eden이다.
  • 메모리가 살아가는 과정 (minor GC or Young GC)
    • Eden 영역에 객체가 생성된다
    • Eden 영역이 꽉 차면 살아있는 객체만 Survivor 영역으로 복사되고, 다시 Eden 영역을 채우게 된다.
    • Survivor 영역이 꽉 차게 되면 다른 Survivor 영역으로 객체가 복사된다. 이때, Eden 영역에 있는 객체들 중 살아있는 객체들도 다른 Survivor 영역으로 간다. 즉, Survivor영역의 둘 중 하나는 반드시 비어 있어야만 한다.
  • 오래 살아있는 객체들은 Old 영역으로 이동한다. 지속적으로 이동하다가 Old영역이 꽉 차면 GC가 발생하는데 이것을 major GC, Full GC 라고 한다.
  • Young GC가 Full GC보다 빠르다. 일반적으로 더 작은 공간이 할당되고, 객체들을 처리하는 방식도 다르기 때문이다.
  • 오라클 JDK의 GC 방식
    • Serial GC
      • 클라이언트용 장비에 최적화된 GC이기 때문에 WAS로 사용하는 JVM에서 사용하면 안된다.
    • Parallel Young Generation Collector
    • Parallel Old Generation Collector
    • Concurrent Mark & Sweep Collector (줄여서 CMS)
    • G1 (Garbage First)