반응형
GC(Garbage Collection)와 전제 조건
- 사용하지 않는 메모리를 자동으로 회수하여 가용한 공간을 만드는 작업
- GC 전담 thread가 별도로 존재하여 메모리가 부족하다고 판단되는 시점에 주기적으로 일어남
이러한 GC는 다음의 전제 조건 (weak generational hypothesis)이 있음
- 대부분의 객체는 금방 접근 불가 상태(unreachable)가 됨
- 오래된 객체에서 젊은 객체로의 참조는 아주 적게 존재함
GC를 진행하는 주체를 Garbage Collector(가비지 컬렉터)라 하고 가비지 컬렉터는 애플리케이션의 할당된 동적 메모리를 자동으로 관리하는 주체로서 다음의 동작들을 통해 동적 메모리 관리를 자동으로 수행
- 메모리를 운영체제에 할당하고 반환
- 요청 시에 메모리를 애플리케이션에 전달
- 메모리가 애플리케이션에 의해 여전히 사용되고 있는지 결정
- 재사용을 위해 사용되지 않는 메모리를 애플리케이션으로부터 회수
가비지 컬렉터는 다음의 두 가지 가설을 관점으로 설계어 있음
- 대부분의 객체는 금방 접근 불가능 상태(unreachable)가 된다.
- 오래된 객체에서 젊은 객체로의 참조는 아주 적게 존재한다.
이러한 가정을 약한 세대 가설(weak generational hypothesis)이라 하며, 이 약한 세대 가설이 GC의 전재 조건이 됨
GC의 수거 대상 기준: Reachability
어떤 객체(Object)에 유효한 참조가 존재한다면 Reachable 그렇지 않다면 Un Reachable 하다고 표현한다.
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에서 제거한다.
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
- 새로 생성된 대부분의 객체는 Eden 영역에 위치
- Eden 영역이 차게 되면 Minor GC가 발생하게 되며 살아남은 객체는 Survivor 영역 중 하나로 이동
- 이후 Eden 영역에서 GC가 발생하면 기존에 살아남은 객체가 존재하는 Survivor 영역 쪽으로 계속 쌓임
2nd GC
- 하나의 Survivor 영역이 가득 차게 되면 그 중에 살아남은 객체를 다른 Survivor 영역으로 이동하며, 가득 찼던 Survivor 영역은 데이터가 없는 상태가 됨
- 이 과정을 반복하다가 계속해서 살아남아 있는 객체는 Old 영역으로 이동
Major GC
- Old 영역에서 일어나는 GC로, 기본적으로 Mark-Sweep-Compact 알고리즘 사용
- Mark
Old 영역의 객체 중 사용하는 것과 사용하지 않는 객체 식별 - Sweep
Heap의 앞 부분부터 사용하지 않는 것으로 식별된 객체 삭제 - Compact
삭제된 객체가 사용하고 있던 공간을 정리하여 각 객체가 heap의 앞부분부터 연속적으로 쌓이도록 정리 - Major GC는 작업이 진행되는 동안 어플리케이션 동작이 멈추기 때문에, 실제 성능 및 안정성에 큰 영향을 미치게 됨
Garbage Collection 타입과 사용 옵션
GC 출력 옵션
참조 링크
끝!
반응형
'Middleware > Tuning' 카테고리의 다른 글
JVM 옵션을 통한 성능 튜닝 이해 (0) | 2021.08.13 |
---|---|
Java Heap 메모리 옵션 (2) | 2021.07.26 |
Java JVM 구조 (0) | 2021.07.26 |