자바의 메모리 구조
2025. 2. 19. 17:36ㆍJava/Java 원리
자바의 메모리 구조
자바는 다양한 메모리 영역을 활용해 데이터를 관리하고,
각 영역은 서로 다른 역할을 하면서 JVM의 효율적인 실행을 돕는다.
- 스택: 메서드 호출과 관련된 지역 변수와 메서드 정보.
- 힙: 동적으로 생성된 객체들.
- 메소드 영역: 클래스, 메서드, 정적 변수 등 클래스 관련 정보.
- PC 레지스터: 현재 스레드가 실행 중인 명령어 주소.
- 네이티브 메모리: 네이티브 코드가 사용하는 메모리.
1. 스택 (Stack)
- 역할: 메서드 호출 시 필요한 데이터(지역 변수, 메서드 인자 등)를 저장하는 메모리 영역.
- 구성: 각 스레드마다 스택이 하나씩 생성되고, 각 스레드에서 실행되는 메서드의 지역 변수와 메서드 호출 정보가 저장된다.
- 특징
- 지역 변수, 매개변수, 메서드 호출 정보 등은 스택 메모리에 저장되고, 메서드가 끝나면 해당 메모리는 자동으로 해제됨.
- 스택은 LIFO(Last In, First Out) 방식으로 작동하며, 메서드 호출이 쌓이면 쌓인 순서대로 스택 프레임이 만들어짐.
2. 힙 (Heap)
- 역할: 동적으로 생성된 객체들이 저장되는 메모리 영역.
- 구성: new 키워드를 사용해서 생성된 객체가 저장됨. 예를 들어, 클래스의 인스턴스나 배열 등이 힙에 저장됨.
- 특징
- 객체는 힙 메모리에 저장되며, 객체가 더 이상 참조되지 않으면 가비지 컬렉션에 의해 자동으로 메모리가 회수됨.
- 힙은 여러 스레드에서 공유되므로 동기화 문제가 발생할 수 있음.
3. 메소드 영역 (Method Area)
- 역할: 클래스 정보, 메서드 정보, 필드 정보 등을 저장하는 영역.
- 구성: 클래스 파일을 로드할 때 클래스의 바이트코드가 이곳에 로드되며, 클래스 변수(static 변수), 상수, 정적 메서드 등이 저장됨.
- 특징
- JVM이 실행되는 동안 클래스에 대한 정보가 저장되며, 이 영역은 모든 스레드가 공유함.
- JVM 시작 시 로드되는 클래스와 관련된 메타데이터를 포함하고 있음.
4. PC 레지스터 (Program Counter Register)
- 역할: 현재 실행 중인 자바 스레드의 명령어 주소를 추적하는 레지스터.
- 특징
- 각 스레드는 자신의 PC 레지스터를 가짐. 스레드가 실행하는 명령어의 주소를 기록하며, 멀티스레딩 환경에서 각 스레드가 실행되는 명령어 위치를 독립적으로 추적할 수 있음.
- 스레드가 메서드를 실행할 때 메서드 내에서 실행될 다음 명령어를 추적.
5. 네이티브 메모리 (Native Memory)
- 역할: 자바 외의 네이티브 코드(C, C++ 등)가 사용하는 메모리 영역.
- 특징
- JVM 외부에서 동작하는 네이티브 코드가 사용하는 메모리 공간.
- 네이티브 코드에서 사용하는 메모리와 관련된 정보가 여기 저장됨.
그림 출처
☕ JVM 내부 구조 & 메모리 영역 💯 총정리
저번 포스팅에서는 JRE / JDK / JVM에 대해서 간략하게 알아보는 시간을 가졌다면, 이번 포스팅에서는 JVM의 내부 구조에 대해 좀 더 자세하게 알아보도록 할 예정이다. JVM(자바 가상 머신)은 자바 언
inpa.tistory.com