티스토리 뷰
가비지컬렉터 - 동적을 할당된(Heap) 메모리 영역중 사용하지 않는 영역을 탐지하여 해제하는 기능
Heap에는 오브젝트 타입의 객체 데이터들이 저장된다.
Stack에는 파라미터 등 임시 변수와 참조 변수를 저장한다.
자바에서는 Heap에 오브젝트(객체) 데이터 할당된다.(String, Intager(int랑 다르다!) 등)
(Stack은 정적(Static)으로 할당한 메모리 영역 - 임시데이터(파라미터, 임시데이터), 및 Heap을 참조하는 참조변수 저장
가비지 컬렉터는 "현재 Stack"을 돌면서(현재 사용하고 있는 객체와 연결된 변수들은 Stack에 존재하니까) 참조 연결된 객체들을 마킹(Reachable)하고 그 외의 것(UnReachable)들은 제거한다.
그래서 가비지 컬렉팅은 언제 일어나는데?
#위 사진는 힙의 구조이다. 힙을 저렇게 나눠서 사용한다.
Eden 영역이 찰 때마다. Survivor 1,2를 번갈아 이동하면서 Minor GC가 발생한다.
age가 특정 값 이상으로 차면 이들은 Old Generation으로 이동하고 Old 영역도 모두 차게 되면 Major GC가 발생한다.
오래될수록 영역을 변경하면서 지속적으로 마킹 & age값을 증가하면서 Survivor영역이 모두 차면 마킹 작업을 하고, Survivor영역을 번갈아 옮기면서 계속 마킹한다. 특정 age를 넘어서면 Old Genenation(고인물)로 이동한다. 이를 프로모션 이라고 한다. Old Generation영역도 모두 사용한다면 가비지 콜렉팅이 일어난다. (올드 영역의 GC는 Major GC라고 한다.)
'공부 > T.I.L(2021)' 카테고리의 다른 글
TIL - Java Beans, JSP, Servlet - MVC (0) | 2021.03.12 |
---|---|
TIL - JVM (0) | 2021.03.10 |
TIL - 정규표현식(REGEX) (0) | 2021.03.03 |
TIL - UX디자인 (0) | 2021.02.18 |
TIL - 프로그래밍에서 Mocking이란? (0) | 2021.02.02 |