728x90
반응형
Garbage Collector란?
- 메모리를 해제 하는 역할 을 한다.
- 줄여서 GC 라고 한다.
- C/C++ 에서는 사용자가 직접 해제를 해줘야한다.
- 하지만 자바에서는 GC가 자동으로 관리를 해준다.
Garbage Collection 동작원리
- GC 동작은 Young generation 과 Old generation 영역에서 발생한다.
- Young generation 과 Old generation 은Heap에 존재한다.
- STW(Stop-The-World): GC를 실행하기 위해 어플리케이션을 멈추는 것을 말한다.
- GC 튜닝은 STW 시간을 줄이는 것이다.
JVM memory 의 구조
Young generation 영역
- Eden, Survior1, Survior2 영역으로 나뉜다.
- Eden:
최초 객체가 생성되는 영역 - Survior1:
Eden 영역이 가득 찾을때 객체가 참조 되는지 여부에 따라 옮겨지는 영역 - Survior2:
Eden이 다시 가득 찾을때 Survior1 에 있는 객체중 참조 되고 있는 객체가 옮겨지는 영역
Old generation 영역
- young generation에서 살아남은 객체가 존재하는 영역이다.
Garbage Collection 동작과정
Minor GC 의 동작과정
- 1. 객체가 새롭게 생성될때 마다 eden 영역에 메모리가 할당 된다.
- 2. eden 영역이 가득 차면 Minor GC가 동작한다.
- 3. eden 영역에 살아 있는 객체는 suvivor1 으로 카피 된다.
- 4. eden 영역은 비워지게 된다.
- 5. eden 영역이 다시 꽉 차게되면 살아 있는 객체들은 suvior1 -> suvivor2 로 이동하고 eden -> suvior1 으로 이동한다.
- suvivor1, suvivor2 로 이동하는 이유는 단편화 방지이다. - 6. Age bit에 살아남은 횟수를 기록한다.
- 7. Age bit가 threshold값 이상이 되거나 survivor영역의 메모리가 부족해지면 old영역으로 이동한다.
Major GC의 동작과정
- Old영역에 데이터가 가득차면 GC를 실행한다.
- Serial GC, Parallel GC, Parallel Old GC 3개의 경우가 있다.
Serial GC
- mark-sweep-compaction 알고리즘을 사용한다.
- 1. Mark: old 영역에 살아 있는 객체를 마크한다.
- 2. Sweep: heap 의 앞부분부터 살아 있는 객체를 제외하고 다 없앤다.
- 3. Compaction: 살아 있는 객체들을 Heap의 앞 부분부터 채운다.
Parallel GC
- Minor GC 를 멀티쓰레드로 동작한다.
Parallel Old GC
- Parallel Old GC에서는 멀티 스레드가 Old 영역을 논리적으로 균일하게 나눈 Region(2KB 정도의 chunk) 단위로 GC를 수행한다.
참고
사실 동작과정은 이것보다 더 복잡하지만 일단 쉽게 이해하기 위해 이렇게 동작하는 것만
이해하려고 작성 하였습니다.
추가로 더 공부하여 깊이 있게 작성할 예정입니다.
728x90
반응형
'Language > Java Architecture' 카테고리의 다른 글
[Java] Java 실행과정 및 JVM (0) | 2021.08.20 |
---|
댓글