GC 동작원리
업데이트:
G.C 동작원리
GC의 동작원리와 내부 구조에 대해 알아보자.
GC (Garbage Collector)
- 가비지 컬렉터
- 메모리 관리를 위해 힙영역에서 더이상 사용하지 않는 객체를 메모리에서 제거하는 것
GC 동작원리
- JVM에서 GC의 스케줄링을 담당하여 Java 개발자에게 메모리 관리의 부담을 덜어준다.
- GC는 background에서 데몬 쓰레드로 돌며 더이상 사용되지 않는 객체들을 메모리에서 제거하여 효율적인 메모리 사용을 돕는다.
- 어떻게 더이상 사용되지 않는 객체로 인식할까?
- 객체는 힙 영역에 저장되고 스택 영역에 이를 가리키는 주소값이 저장되는데 참조되지 않는(자신을 가리키는 포인터가 없는, unreachable) 객체를 메모리에서 제거한다.
GC 물리적 공간 (Heap 영역)
- Young generation
- Eden
- 새로 생성된 객체들이 위치
- Minor GC 발생
- Survivor 1,2
- Eden 영역에서 GC 실행 후 살아남은 객체들이 위치
- Minor GC 발생
- Eden
- Old generation
- Suvivor 영역에서 여러번의 GC 후 살아남은 객체들이 위치
- Major GC 또는 Full GC 발생
STW
-
Old 영역이 가득차면 major GC 또는 Full GC가 동작하는데 이때 STW 상태가 되므로 이를 최소화 하는 것이 중요하다.
-
STW(Stop-The-World)
- GC 처리하는 동안 Java의 프로세스가 모두 멈춰버리는 현상이다.
GC 처리방식
- Serial GC
- Mark-sweep-compact 알고리즘
- 적은 메모리와 CPU 코어 갯수가 적을 때 적합하다.
- Paraller GC
- Serial GC와 알고리즘은 같지만 GC를 처리하는 Thread가 여러개이다.
- 메모리와 코어가 충분할 때 적합하다.
- Paraller Old GC
- Paraller GC에서 Old GC 알고리즘을 개선한 버전이다.
댓글남기기