티스토리 뷰
Runtime Data Areas는 Process로서의 JVM 프로그램을 수행하기 위해 OS로 부터 할당 받는 메모리 영역으로 각각의 목적에 따라 5개의 영역으로 나뉜다.

JVM 메모리구조
1. 메소드영역(Method Area)
- 클래스 파일의 바이트코드, 상수, 메소드와 필드의 이름, 타입, 접근 제어자 정보 등을 보관하는 곳이다.
- 모든 스레드가 공유하는 영역이다.
- 클래스 로딩 시점에 초기화되며, JVM이 종료될 때까지 유지된다.
2. 힙 영역(Heap)
- 객체와 배열 등을 생성하는 곳.
- 프로그램 실행 중 동적으로 메모리를 할당하고 해제한다.
- Garbage Collector(GC)에 의해 관리된다.
- 모든 스레드가 공유하는 영역이다.
3. 스 영역(Stack)
- 메소드 호출과 관련된 정보를 저장하는 곳이다.
- 메소드가 호출될 때마다 해당 메소드의 지역 변수, 매개 변수, 리턴 값 등이 저장된다.
- 스택 프레임(Stack Frame)이라는 논리적인 구조로 이루어져 있다.
- 각 스레드마다 독립적으로 사용되는 영역이다.
4. PC(Program Counter) 레지스터
- 스레드가 실행 중인 JVM 명령어의 주소를 저장하는 레지스터이다.
- 스레드마다 독립적으로 사용되는 영역이다.
5. Native 메소드 스택
- 자바 코드 외부에서 실행되는 네이티브 코드(C, C++)를 위한 스택이다.
- JNI(Java Native Interface)를 사용하여 자바 코드에서 네이티브 코드를 호출할 때 사용된다.
- 네이티브 메소드를 호출하면 해당 메소드를 실행하기 위한 스택 프레임이 생성되어 사용된다.
- 각 스레드마다 독립적으로 사용되는 영역이다.
- 스레드(Thread): 하나의 프로세스 내에서 실행되는 실행 흐름 단위를 의미한다. 각 스레드는 자신만의 실행 흐름을 가지고 동작하며, 다른 스레드와는 독립적으로 실행된다. 스레드를 사용하면 동시에 여러 작업을 처리할 수 있다.
- Garbage Collector: 자바에서 동적으로 할당된 메모리 중에서 사용하지 않는 객체를 자동으로 탐지하여 해제하는 기능을 하는 프로그램.
- 레지스터: CPU가 명령어를 실행하기 위해 사용하는 고속 메모리이다. CPU가 실행하는 명령어는 레지스터에 저장된 데이터를 기반으로 실행된다.