본문 바로가기

Java

GC(garbage collector)

1. GC(garbage collector)

 - JVM에서는 사용하지 않는 객체에 대하여 GC가 자동으로 메모리를 정리하여 준다.

 - 매소드 영역, 스택 영역에서 힙 영역을 참조하는데, 힙 영역에서 참조 되지 않는 객체들을 정리한다.

 

2. 동작방식

 ** compact 방식은 메모리 단편화를 해결방법과 유사(페이징, 세그먼트)

 

3. Heap 영역

 - 1 eden에 객체가 생성

 - 2 eden영역에 객체가 다 쌓이면 Minor GC 발생

 - 3 reachable한 객체는 survivor1로 이동

 - 4 survivor1에서 Minor GC 발생

 - 5 reachable한 객체는 survivor2로 이동

 - 6 index가 올라가면서 reachable한 객체는 old generation으로 이동

 - 7 old generation에서 Major GC 발생

 - GC가 일어나면 stop-the-world 발생(GC를 실행하기 위해 JVM이 java application을 중지하는 시간)

 

4. Heap 영역의 이유

 

 new와 old로 영역을 나눈 이유

 - old의 영역에 비해 new 영역은 사이즈가 작기 때문에 Minor GC에 의한 stop-the-world 시간이 상대적으로 적게 든다.

 survivor1, 2로 나누어서 하는 이유

 - 객체를 정리하면서 compact의 시간을 줄이기 위함

 

5. GC의 종류

 

 - Serial GC : single Thread, stop-the-world 타임이 김

 - Parallel GC : multi Thread, java8 default GC

 - Parallel old GC : heap영역의 old generation도 관리

 - CMS GC : stop-the-world 타임을 줄이기 위해 compact를 사용하지 않음

 - G1 GC :heap영역을 region으로 구분하여 탐색, java9기본, compact 사용
 - epsilon : java11, heap영역이 full일때 더 이상 할당받지 않고, shutdown

 - ZGC : java11, 낮은 지연시간처리, 어플리케이션과 동시성 있게 처리(딜레이 10ms미만)

 

'Java' 카테고리의 다른 글

Stream API  (0) 2022.02.09
Collection FrameWork  (0) 2022.01.25