Middleware/Tuning

Java GC 알고리즘 및 주요 옵션

Cloud Applicaiton Architect 2021. 7. 28. 08:08
반응형

GC(Garbage Collection)와 전제 조건

  • 사용하지 않는 메모리를 자동으로 회수하여 가용한 공간을 만드는 작업
  • GC 전담 thread가 별도로 존재하여 메모리가 부족하다고 판단되는 시점에 주기적으로 일어남

이러한 GC는 다음의 전제 조건 (weak generational hypothesis)이 있음

  • 대부분의 객체는 금방 접근 불가 상태(unreachable)가 됨 
  • 오래된 객체에서 젊은 객체로의 참조는 아주 적게 존재함

GC를 진행하는 주체를 Garbage Collector(가비지 컬렉터)라 하고 가비지 컬렉터는 애플리케이션의 할당된 동적 메모리를 자동으로 관리하는 주체로서 다음의 동작들을 통해 동적 메모리 관리를 자동으로 수행

  • 메모리를 운영체제에 할당하고 반환
  • 요청 시에 메모리를 애플리케이션에 전달
  • 메모리가 애플리케이션에 의해 여전히 사용되고 있는지 결정
  • 재사용을 위해 사용되지 않는 메모리를 애플리케이션으로부터 회수

가비지 컬렉터는 다음의 두 가지 가설을 관점으로 설계어 있음

  • 대부분의 객체는 금방 접근 불가능 상태(unreachable)가 된다.
  • 오래된 객체에서 젊은 객체로의 참조는 아주 적게 존재한다.

이러한 가정을 약한 세대 가설(weak generational hypothesis)이라 하며, 이 약한 세대 가설이 GC의 전재 조건이 됨

 

GC의 수거 대상 기준: Reachability

어떤 객체(Object)에 유효한 참조가 존재한다면 Reachable 그렇지 않다면 Un Reachable 하다고 표현한다.

Reachable오브젝트와 Unreachable오브젝트

Runtime Data Area에서 Method Area, Native Stack(JNI), Java Stack 등에서 Heap 메모리의 Object들을 참조하는 데이터 영역을 GC Root라고 함

GC 대상 식별 및 제거: Mark and Sweep

  • Mark : GC는 GC Root로부터 모든 변수를 스캔하면서 각각 어떤 객체를 참조하고 있는지 찾아서 마킹한다.
  • Sweep : Unreachable 객체들을 Heap에서 제거한다.

 

Mark and sweep 진행 

GC 튜닝이 필요한 이유: STW (Stop The World)

  • STW란 GC를 실행시키기 위해 JVM이 모든 애플리케이션 쓰레드를 중단시키는 행위를 의미.
  • STW가 발생하면 GC를 실행하는 쓰레드를 제외한 나머지 쓰레드는 모두 작업을 멈춤.
  • GC작업이 완료된 이후에야 중단했던 작업을 다시 시작됨.
  • GC가 자주 발생하거나, 또는 시간이 오래 걸리는 경우는 어플리케이션이 비정상 동작하는 시간이 길어진다는 의미이기 때문에 대게의 경우 gc 튜닝이란 STW 시간을 줄이는 것을 의미

 

2가지 종류의 GC: Minor GC & Major GC

기본적으로GC가일어나는영역에따라GC를구분함

  • Minor GC : 새로 생성된 객체가 위치하는 Young 영역에서 발생
  • Major GC : Young 영역에서 살아남은 객체가 이동된 Old 영역에서 발생하며, Full GC로 불리기도 함

 

Minor GC

  • Eden(Young) 영역의 GC
  • Eden 영역 1개와 Survivor 영역 2개를 이용해 Copy & Scavenge 방식으로 GC를 진행

1st GC

1st GC 그림

 

  • 새로 생성된 대부분의 객체는 Eden 영역에 위치
  • Eden 영역이 차게 되면 Minor GC가 발생하게 되며 살아남은 객체는 Survivor 영역 중 하나로 이동
  • 이후 Eden 영역에서 GC가 발생하면 기존에 살아남은 객체가  존재하는 Survivor 영역 쪽으로 계속 쌓임

2nd GC

2nd GC 그림

  • 하나의 Survivor 영역이 가득 차게 되면 그 중에 살아남은  객체를 다른 Survivor 영역으로 이동하며, 가득 찼던 Survivor  영역은 데이터가 없는 상태가 됨
  • 이 과정을 반복하다가 계속해서 살아남아 있는 객체는 Old  영역으로 이동

Major GC

  • Old 영역에서 일어나는 GC로, 기본적으로 Mark-Sweep-Compact 알고리즘 사용

    Major GC 프로세스
  • Mark
    Old 영역의 객체 중 사용하는 것과 사용하지 않는 객체 식별
  • Sweep
    Heap의 앞 부분부터 사용하지 않는 것으로 식별된 객체 삭제
  • Compact
    삭제 객체 사용하 공간 정리하 객체가 heap 앞부분부 연속적으 쌓이도 정리
  • Major GC는 작업이 진행되는 동안 어플리케이션 동작이 멈추기 때문에, 실제 성능 및 안정성에 큰 영향을 미치게 됨

 

Garbage Collection 타입과 사용 옵션

[Garbage Collection Type]
gc2.png
10MB

 

GC 출력 옵션

GC 출력 옵션

 

GC출력옵션.xlsx
0.01MB

 

참조 링크

 

Mechanism of garbage collection

In JavaVM, the memory space of the New area for which copy garbage collection is executed, is divided into the Eden area and the Survivor area. The Survivor area is furthermore divided into the From space and the To space. The From space and the To space h

itdoc.hitachi.co.jp

 

끝!

 

 

반응형

'Middleware > Tuning' 카테고리의 다른 글

JVM 옵션을 통한 성능 튜닝 이해  (0) 2021.08.13
Java Heap 메모리 옵션  (2) 2021.07.26
Java JVM 구조  (0) 2021.07.26