티스토리 뷰

Language/Java

JVM의 Garbage Collector

Seogineer 2021. 4. 9. 03:50

GC(Garbage Collector)란?

- JVM의 Heap 영역에서 사용하지 않는 객체를 삭제하는 프로세스

 

GC의 수거 대상

- 어떤 객체의 유효한 참조가 존재한다면 Reachable, 그렇지 않다면 Unreachable이라고 한다.

 

GC의 동작 순서

- Mark and Sweep 알고리즘을 따른다.

- Mark는 Reachable 객체와 Unreachable 객체를 식별하여 마킹한다.

- Sweep은 Unreachable한 객체들을 Heap에서 제거한다.

- GC 알고리즘에 따라 Compact 과정이 추가되기도 한다. Compact는 Sweep 후에 분산된 객체들을 한 곳으로 모아서 메모리 단편화를 막아준다.

 

GC는 언제 일어날까

- Heap의 구조는 Young Generation, Old Generation으로 구분된다.

- Young Generation은 새로운 객체들이 할당되는 영역

- Old Generation은 Young Generation에서 오랫동안 살아남은 객체들이 존재하는 영역

 

 

- 새로운 객체들이 eden 영역이 할당이 되고 더이상 할당할 수 없을 경우 Minor GC가 발생한다.

- Mark and Sweep 알고리즘에 따라 Reachable 객체와 Unreachable 객체를 식별한다.(Mark)

- eden 영역의 Unreachable 객체는 제거된다.(Sweep)

- Reachable 객체는 Survivor 영역으로 이동하고 Age 값이 증가한다. 이때 Survivor 영역은 둘 중 한 곳에 객체가 저장되면 나머지 한 곳은 반드시 비어 있는 상태여야 한다.

- Minor GC가 발생할 때마다 Survivor 영역이 바뀐다.

- 위과 같은 Minor GC 과정이 반복되면서 Age 값이 특정 임계점에 도달한 객체는 Old Generation 영역으로 이동한다.

- Old Generation 영역이 가득 차면 Major GC(또는 Full GC)가 발생한다.

 

Stop-the-World

- GC를 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것

 

GC의 종류

GC 설명
Serial GC - GC를 처리하는 쓰레드가 1개
- 다른 GC에 비해 Stop-the-World 시간이 길다.
- Mark-Compact(Sweep 포함) 알고리즘 사용
Parallel GC - Java 8의 default GC
- Young Generation의 GC를 멀티 쓰레드로 수행
- Serial GC에 비해 Stop-the-World 시간이 짧다.
Parallel Old GC - Parallel GC를 개선
- Old 영역에서도 멀티 쓰레드 방식의 GC 수행
- Mark-Summary-Compact 알고리즘 사용(summary: 멀티쓰레드가 old영역을 분리해서 훑는다.)
CMS(Concurrent Mark Sweep) GC - Stop-the-World 시간을 줄이기 위해 고안됨
- Reachable 객체를 한번에 찾지 않고 순차적으로 찾는 것이 특징이다.
- compact 과정이 없음(메모리 단편화 문제 발생)
G1(Garbage First) GC - CMS GC의 메모리 단편화 문제를 개선
- Java 9+의 default GC
- Heap을 일정한 크기의 Region으로 나눔
- 전체 Heap이 아닌 Region 단위로 탐색
- compact 진행

 

참고

www.youtube.com/watch?v=vZRmCbl871I&list=TLPQMDgwNDIwMjFUy2LZh_aEhA&index=2

www.youtube.com/watch?v=Fe3TVCEJhzo&list=TLPQMDgwNDIwMjFUy2LZh_aEhA&index=3

www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html

d2.naver.com/helloworld/1329

'Language > Java' 카테고리의 다른 글

자바 자료구조  (0) 2022.07.04
Overflow가 발생하면 어떻게 될까?  (0) 2022.04.27
Java Virtual Machine 구조  (0) 2021.04.09
10진수 <-> 2, 8, 16진수 변환  (0) 2021.02.28
데이터 타입별 형변환 방법  (0) 2021.02.22
댓글
Total
Today
Yesterday
링크
Apple 2023 맥북 프로 14 M3, 스페이스 그레이, M3 8코어, 10코어 GPU, 512GB, 8GB, 한글