[ 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
'back > java' 카테고리의 다른 글
[JAVA] 직렬화 (0) | 2022.04.15 |
---|---|
[java] 메소드 안에서 제어문 없는 중괄호 {} 의 쓰임 (0) | 2020.09.07 |
URL 직접 접근 막기 : referer 헤더정보 사용 (0) | 2020.08.12 |
[Java] Stream 스트림 문법 정리 (0) | 2020.04.29 |
Error 와 Exception의 차이, Unchecked Exception 과 Checked Exception의 차이 (0) | 2020.03.26 |