728x90
반응형
자바 GC 정리
- GC 란 가비지 컬렉터이며, 자바에서 메모리를 정리하는 기법
- Minor GC, Major GC 가 있음.
Minor GC
- Heap 은 크게 Young 과 Old 영역이 있음.
- Young 부분에서 메모리가 꽉찼을 때, 발생하는게 Minor GC
- Young 은 Eden, Survivor 영역이 있으며, Eden 영역이 꽉차면 Survivor 영역으로 옮김. (Minor GC 발생)
- Survivor 영역이 꽉차면 Old 영역으로 옮김.
- Minor GC 는 Stop the world 가 발생. Stop the world 란 GC 를 위해 가비지 컬렉터 이외의 스레드가 멈춘다는 것을 의미.
- 너무 짧아서 STW 가 안일어나는 것처럼 보임.
Major GC
- OLD 영역이 꽉찼을 때, 발생.
- Minor GC 보다 시간이 많이 걸리는 이유는 전체 객체를 검색하기 때문
GC 알고리즘
Serial
- 하나의 스레드로 처리하기에 시간 오래 걸림.
- mark --> sweep --> compact 순으로 일어남.
- GC 대상 데이터를 marking 하고. sweep (청소) 하고. 마지막에 compact (압축)
parallel GC
- 위에 Serial GC 가 병렬 처리 할 수 있는 알고리즘.
CMS GC
- 위에 단계중 mark --> sweep 만 일어나고. compact 은 안 일어남.
- CMS GC 는 OLD 영역에서만 일어남.
- 만약 메모리 청소가 제대로 안되서 메모리 단편화가 일어나고. 할당할 공간이 없으면 그 때 압축을 실행하는데 이게 시간이 많이 걸림.
- 기본적으로는 STW 가 적게 걸리겠지. compact 가 없으니.
G1 GC
- CMS GC 와 비슷한데, 메모리를 여러 개 나누어서 그 나눈 메모리 당 CMS 를 적용하는 거라 이해하면 됨.
refernece
'Java' 카테고리의 다른 글
ConvertUtils stringToMap 설명 및 테스트케이스 작성 (0) | 2020.12.15 |
---|---|
InputStream 을 String 으로 변환. Testcase 있음. (0) | 2020.12.09 |
java primitive vs wrapper 설명 (0) | 2020.11.12 |
java Optional 설명 (0) | 2020.11.07 |
하나의 JVM 은 멀티 core 를 사용할 수 있는가? (0) | 2020.11.06 |
댓글