JVM 메모리 구조에 대해 설명해보자
- JVM 메모리 구조는 JVM에서 프로그램이 실행될 때 데이터를 효율적으로 관리하기 위해 나누어진 영억이다. 각 영역은 특정한 역할과 특징을 가지마 애플리케이션의 안정적 실행을 보장한다.
1. Method Area
- 메소드 영역은 클래스와 관련된 메타데이터, 즉 프로그램의 구조적 정보를 저장하는 영역이다.
- JVM이 실행되는 동안 공유 메모리 영역으로 사용된다.
- 저장 내용
- 클래스 메타데이터: 클래스 이름, 부모 클래스 정보, 인터페이스, 메소드, 필드 등.
- Static 변수: 클래스 로드 시 초기화되는 정적 변수.
- Constant Pool(상수 풀): 문자열 상수나 메소드/필드 참조와 같은 상수 정보를 저장.
- 바이트코드: 각 메소드의 실제 실행 코드.
- 특징
- 모든 Thread에서 공유함.
- JVM이 시작될 때 초기화되고, 종료될 때까지 유지된다.
2. Heap Area
- 객체와 배열이 동적으로 생성되고 저장되는 메모리 영역.
- JVM에서 가장 큰 메모리 영역. Garbage Collector에 의해 관리됨.
- 저장 내용
- 객체:
new
키워드로 생성된 객체. - 인스턴스 변수: 객체가 가지고 있는 멤버 변수.
- 클래스읜 런타임 데이터
- 객체:
- 구조
- 힙은 크게
Young Generation
과Old Generation
으로 나뉜다.- Young Generation
- 새로 생성된 객체가 저장되는 영역.
- Old Generation
- Young Generation에서 오래 살아남은 객체가 이동됨.
- 메모리에서 가장 크고, 주로 긴 생명주기를 가진 객체가 저장됨.
- Metaspace(Optional)
- Java 8 이후 부터 클래스 메타데이터를 관리하는 메모리 공간.
- Young Generation
- 힙은 크게
- 특징
- 모든 Thread에서 공유함.
- 메모리가 부족하면 Garbage Collection이 실행됨
3.Stack Area
- 각 쓰레드마다 독립적으로 생성되는 메모리 영역, 메소드 호출과 관련된 데이터를 관리함.
- 저장 내용
- Stack Frame: 메소드 호출 시마다 생성되는 단위.
- 지역변수: 메소드 내에서 선언된 변수.
- 매개변수: 메소드 호출 시 전달된 값.
- 연산 중간 값: 연산 결과 저장.
- Stack Frame: 메소드 호출 시마다 생성되는 단위.
- 구조
- LIFO(Last In, First Out)로 작동
- 메소드 호출 시 스택 프레임 생성 -> 메소드 종료 시 제거.
- 특징
- 각 Thread 마다 독립적으로 생성.
- 메모리 할당과 해제가 빠름.
4.PC Register
- 현재 실행 중인 명령어의 조소를 저장하는 메모리 영역
- JVM의 모든 명령은 순차적으로 실행되기 때문에 이 정보가 필요함
- 저장 내용
- 명령어 주소 : 현재 실행중인 JVM 명령어의 메모리 위치
- 특징
- 각 Thread 마다 독립적으로 생성
- Java code 와 Native code 모두에 적용됨.
5. Native Method Stack
- Java 코드가 아닌, JVM 이 실행하는 네이티브 코드(C, C++)와 관련된 메모리를 관리.
- JNI(Java Native Interface)를 통해 호출되는 네이티브 메소드에서 사용.
- 저장 내용
- 네이티브 메소드의 호출 정보와 실행에 필요한 데이터.
- 특징
- 각 쓰레드마다 독립적으로 생성
정리
- Method Area: 클래스 메타데이터, static 변수 저장
- Heap Area: 객체와 인스턴스 변수 저장
- Stack Area: 메소드 호출과 관련된 데이터 저장
- PC Register: 현재 실행중인 명령어의 주소 저장.
- Native Mtehod Stack: 네이티브 코드 실행과 관련된 메모리.
반응형
'프로그래밍 > 면접대비문제' 카테고리의 다른 글
JVM의 Garbage Collection(GC) (0) | 2024.12.26 |
---|---|
@Transactional 메소드 내에서 @Transactional(propagation = Propagation.REQUIRED_NEW) 메소드를 실행하게되면 어떤 일이 발생할까 (0) | 2024.11.30 |
@Transactional 어노테이션이 있는메소드, 스프링 시작부터 메소드 시작까지의 작업 (1) | 2024.11.30 |
스프링 부트 어플리케이션이 실행되면 어떤 일들이 일어나는가. (0) | 2024.11.30 |
이터레이터(Iterator) (0) | 2021.01.11 |