
JVM의 주요 3가지 영역
- Method Area
- Heap
- Call Stack
1. 메서드 영역(Method Area)
- Class Area, Code Area, Static Area로 불려지며, 의미상 공유 메모리 영역이라고 불린다.
- 프로그램 실행 중 어떤 클래스가 사용되면, JVM은 해당 클래스의 클래스 파일(*.class)을 읽어서 분석하여 클래스에 대한 정보 (클래스 데이터)를 이곳에 저장.
- 클래스 변수(static이 붙은 변수)도 이 영역에 함께 생성.
- 즉, JVM이 동작해서 클래스가 로딩될때 생성되고, 모든 스레드가 공유하는 영역이다.
2. 힙 영역(Heap Area)
- 인스턴스가 생성되는 공간.
- 프로그램 실행 중 생성되는 인스턴스는 모두 이곳에 생성된다.
- 즉, 인스턴스 변수들이 생성되는 공간.
public Class Person {
String name;
int age;
static String id;
}
- name, age 는 인스턴스 변수. => 인스턴스 생성 시(new 키워드) 새로 생김.
- id 는 클래스 변수. => 클래스가 프로그램에 올라갈 때 한 번만 메모리 올라감.
- name, age, id 는 멤버 변수.
3. 호출 스택(Call Stack 또는 Execution Stack)
- 호출 스택은 메서드의 작업에 필요한 메모리 공간을 제공한다.
- 메서드가 호출되면, 호출스택에 호출된 메서드를 위한 메모리가 할당.
- 이 메모리는 메서드가 작업을 수행하는 동안 지역변수(매개변수 포함)들과 연산의 중간결과 등을 저장하는데 사용.
- 메서드가 작업을 마치면 할당되었던 메모리공간을 반환되어 비워진다.