[ GC : Garbage collector ]

JVM 메모리는 크게 class / stack / heap 영역으로 나누어지며,

GC 는 heap 영역을 대상으로 수행된다.

 

Heap 영역은 

Young / Old / Perm 영역으로 나눌 수 있으며 (java 8부터 Perm 영역은 제거되었음)

Young 영역은 

Eden , survivor 0, survivor 1 로 나눌 수 있다.

 

최초 객체 생성시 Eden 영역에 할당되며,

Eden 영역이 다 찼을 경우 reachable (접근 가능한 상태) 한 객체는 survivor 0로 옮기고 Eden 영역을 정리한다 (minor GC)

반복적으로 Eden 영역을 정리하다 survivor 0 이 다 찬 경우, reachable 한 객체를 survivor 1 로 옮긴 후 survivor 0 을 비워준다.

객체의 age 가 특정 임계점 도달시 Old 영역으로 객체를 옮겨준다 (promote)

위 과정을 반복하다 Old 영역도 다 차게되면 Full GC (major GC) 가 발생한다.

 

GC 수행시 아래 작업을 공통적으로 수행

Mark and Sweep : Mark(사용되는 메모리와 사용되지 않는 메모리 구분), Sweep(사용되지 않는 메모리 해제)

Stop the world : GC 수행하는 쓰레드를 제외한 모든 쓰레드 작업 중단

 

[ GC 알고리즘 종류 ]

1. Serial GC : 싱글쓰레드로 GC 수행

2. Parallel GC : Young 영역 GC 를 멀티쓰레드로 수행 (java 8)

3. Parallel Old GC : Young , Old 영역 모두 GC를 멀티쓰레드로 수행 (java 8)

3. CMS GC : 

4. G1 GC : Heap 을 일정한 크기의 region 으로 나눔. (java 9)

 

 

 

https://mangkyu.tistory.com/118

https://velog.io/@injoon2019/CS-%EC%A0%95%EB%A6%AC-GC-Garbage-Collector

 

 

 

 

 

반응형

+ Recent posts