
자바는 JVM(Java Virtual Machine)을 통해 실행되며, JVM은 프로그램 실행 시 메모리를 효율적으로 관리하기 위해 여러 영역으로 나눕니다. 이 글에서는 자바 메모리 구조를 이해하는 데 필요한 핵심 개념들을 살펴보겠습니다.
자바 메모리 영역의 구성 🗂️
자바 메모리는 크게 아래 다섯 가지 영역으로 나뉩니다:
1. 메소드(Method) 영역(= Static) 📚
- 역할: 클래스 수준의 정보를 저장하는 공간입니다.
- 내용:
- 클래스 로더가 읽어온 클래스 메타데이터
- static 변수
- 상수 풀 (Constant Pool)
- 특징:
- 모든 쓰레드가 공유하는 영역입니다.
- JVM 실행 중 런타임 상수나 메서드 정보를 저장합니다.
2. 힙(Heap) 영역 🏗️
- 역할: 객체와 배열을 저장하는 영역으로, JVM에서 가장 큰 메모리 영역입니다.
- 내용:
- 모든 객체(instance)
- 클래스의 인스턴스 변수
- 특징:
- 모든 쓰레드가 공유하며, 가비지 컬렉터(GC)에 의해 관리됩니다.
- 객체는 참조(reference)를 통해 접근합니다.
3. 스택(Stack) 영역 🌀
- 역할: 각 쓰레드별로 실행되는 메서드 호출 정보를 저장합니다.
- 내용:
- 메서드 호출 시 생성되는 지역 변수
- 메서드 호출과 반환 정보
- 특징:
- 쓰레드마다 독립적으로 할당됩니다.
- FILO(First-In, Last-Out) 구조를 따릅니다.
4. PC 레지스터(Program Counter Register) 영역 🧮
- 역할: 쓰레드가 현재 실행 중인 JVM 명령어의 주소를 저장합니다.
- 특징:
- 쓰레드마다 고유한 PC 레지스터를 갖습니다.
- JVM이 명령어를 순차적으로 실행할 수 있도록 돕습니다.
5. 네이티브 메소드 스택(Native Method Stack) 영역 🛠️
- 역할: 자바 외의 네이티브 코드(C/C++ 등) 실행을 지원합니다.
- 내용:
- 네이티브 메서드 호출 시 필요한 메모리
- 특징:
- 네이티브 메서드 호출에 필요한 데이터를 관리합니다.

'Back_End > JAVA' 카테고리의 다른 글
자바(JAVA) try-with-resources (0) | 2024.12.31 |
---|---|
자바에서 Generic(제네릭)을 쓰는 이유 (1) | 2024.12.27 |
자바(JAVA) JRE, JDK, JVM 란? (1) | 2024.12.18 |
자바의 가비지 컬렉터 (Garbage Collector) 🗑️ (0) | 2024.12.18 |
자바스크립트(JavaScript)의 스프레드 문법 (1) | 2024.12.18 |