insightp25
로그인
insightp25
로그인
[TIL] JVM의 메모리 구성
insightp25
·
2023년 2월 14일
팔로우
0
Java
TIL
JVM은 메모리를 여러가지 다른 영역에 있는 메모리를 관리한다. 각 영역은 고유의 목적과 작동방식이 있으며, 주 메모리 영역들은 다음과 같다.
1. 힙 영역heap area
프로그램의 모든 스레드가 공유(멀티스레드 사용시 동기화에 주의 필요)
프로그램에서 생성된 모든 객체 저장
런타임 시 동적으로 할당
JVM의 garbage collector가 관리
Young Generation, Old Generation, Permanent Generation- Metaspace 등 세부 영역 구성(Java 8+)
2. 스택 영역stack area
스레드별로 stack 1개씩 존재, 각각 고유 stack 영역 차지
각 스택 안 stack frame이라는 자료구조가 메서드 호출시마다 생성(push)되어 stack에 쌓이며, 메서드 종료 또는 예외 발생시 제거(pop)되어 소멸
stack frame: local variable array, operand stack, frame data 포함
frame data: Constant Pool, 이전 stack frame 정보, 현재 메서드가 속한 클래스/객체에 대한 참조 등 정보 포함
호출된 메서드와 그 지역변수가 쌓이는 영역
메서드 호출의 발생 기록
3. 메서드 영역method area
프로그램의 모든 스레드가 공유(멀티스레드 사용시 동기화에 주의 필요)
클래스 로더가 바이트코드 클래스 파일(.class)을 읽어오면 클래스 정보를 파싱, 이 영역에 저장
클래스와 메서드에 대한 metadata: field, method names, data types, code 등
permanent generation 또는 non-heap memory라고도 한다.
프로그램의 모든 스레드가 공유
4. 네이티브 메서드 영역native method stacks
스레드별로 stack 1개씩 존재, 각각 고유 stack 영역 차지
성능 향상 등을 목적으로 Java 바이트코드가 아닌 다른 언어(C/C++)로 작성된 메서드에 대한 별도의 stack 영역
호출된 네이티브 메서드 저장
운영체제OS, 기타 네이티브 라이브러리와 상호작용 시 사용
5. PC 레지스터 영역program counter register
스레드별로 stack 1개씩 존재, 각각 고유 stack 영역 차지
스레드에 의해 실행되는 코드 현 위치(바이트코드 몇 번째 줄이 실행중인지) 저장
참고자료
baeldung, "Stack Memory and Heap Space in Java", 2022,
https://www.baeldung.com/java-stack-heap
Sumith Puri, "Java Memory Architecture Cheat Sheet", 2015,
https://dzone.com/articles/java-memory-architecture-model-garbage-collection
insightp25
backend, data-streaming, AI
팔로우
다음 포스트
[TIL] 자바 컴파일러Java Compiler
0개의 댓글
댓글 작성