본문 바로가기

IT Study

[동영상 시청] JVM의 Garbage Collector

반응형

참고 동영상 

https://www.youtube.com/watch?v=vZRmCbl871I


JVM(Java Virtual Machine)
운영체제의 메모리 영역에 접근하여 메모리를 관리하는 프로그램
메모리 관리, Garbage Collector 수행 
Garbage Collector
동적으로 할당한 메모리 영역 중 사용하지 않는 영역을 탐지하여 해제하는 기능
Stack : 정적으로 할당한 메모리 영역
원시 타입의 데이터가 값과 함께 할당, Heap영역에 생성된 Object 타입의 데이터의 참조 값 할당
Heap : 동적으로 할당한 메모리 영역 (개발자영역) 
모든 Object 타입의 데이타가 할당, Heap 영역의 Object를 가리키는 참조 변수가 Stack에 할당

Garbage Collector 과정

  1. Garbage Collector가 Stack의 모든 변수를 스캔하면서 각각 어떤 객체를 참조하고 있는지
    찾아서 마킹한다. (Mark)
  2. Reachable Object가 참조하고 있는 객체도 찾아서 마킹한다. (Mark)
  3. 마킹되지 않는 객체를 Heap에서 제거한다 (Sweep)

=>  (Mark&Sweep)과정

Garbage Collector 종류 

Serial GC
GC를 처리하는 스레드가 1개이다.
CPU 코어가 1개만 있을 때 사용하는 방식
Mark-Compact collection 알고리즘 사용
Parallel GC
GC를 처리하는 스레드가 여러 개 이다.
Serial GC보다 빠르게 객체를 처리할 수 있다.
Parallel GC는 메모리가 충분하고 코어의 개수가 많을 때 사용하면 좋다.
(Stop-The-World)
GC를 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것이다
. Stop-The-World가 발생하면 GC를 실행하는 스레드를 제외한 나머지 스레드는 모두 작업을 멈춘다.
GC 작업을 완료한 이후에 중단한 작업을 다시 시작한다.
Concurrent Mark Sweep GC (CMS GC) 
Stop-The-World 시간이 짧다.
애플리케이션 응답 시간이 빨라야 할 때 CMS GC를 사용한다.
다른 GC 방식보다 메모리와 CPU를 더 많이 사용한다.
Compaction 단계가 제공되지 않는다.
G1 GC
각 영여을 Region 영역으로 나눈다.
GC가 일어날 때, 전체 영역(Eden, Survival, Old grneration)을 탐색하지 않는다.
G1.GC는 바둑판의 각 영역에 객체를 할당하고 GC를 실행한다.
그러다가, 해당 영역이 꽉 차면 다른 빈 영역에, 객체를 할당하고 GC를 실행한다.
G1 GC는 STW 시간이 짧다. Compaction을 사용한다.
반응형