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 |