[면접 질문] Java Stack & Heap의 구조
Java의 Stack과 Heap에 대한 면접 질문 정리
Java 메모리 구조
애플리케이션 실행을 위해 구축한 Java Runtime Data Area가 메모리에 위치하게 됨
-
PC Register, Native Method Stack, Method 영역은 모든 스레드가 공유
-
Stack과 Heap 영역만 스레드 고유의 영역으로 가지게 됨
Heap의 구조
Eden → Survivor → Old
위와 같은 형태로 객체가 이동하게 되는데 기본적으로는 생성순으로 이해하면 될 것이다.
Garbage Collector의 역할
-
Eden: 자바 객체가 생성되자마자 저장되는 공간
-
Survivor & Old: 참조 정도에 따라 객체가 이동된 공간
-
Mark and Sweep 알고리즘을 사용한다.
Minor Garbage Collector
Eden과 Survivor 영역 (Young Generation) 의 메모리가 허용치를 초과하는 경우 객체의 참조에 따라 영역을 이동시키는 역할
Major Garbage Collector
Old 영역 (Tenured Generation) 의 메모리가 허용치를 초과할 경우, 참조되지 않는 객체를 전부 제거하고 메모리를 회수하는 역할
- 삭제 과정에서 가비지 컬렉터를 실행하는 스레드를 제외한 나머지 스레드 전부 정지 ('Stop-The-World')
Stack의 구조
기본 자료형 + 지역 변수 + 매개 변수
여기서 매개 변수의 경우, 객체의 주소값을 가지고 Heap 영역의 객체를 참조하는 형태로 사용된다.
→ 매개 변수가 다른 객체를 참조하게 되는 경우, 주소값이 달라지는 것뿐이며, Heap에 저장된 객체가 바로 사라지지 않는다! (Major GC가 실행 전까지 Hold)
참고
댓글 작성
게시글에 대한 의견을 남겨 주세요.