stackArea(스택영역) :
- 지역 변수(local variable) , 매개변수(patameter) 가 할당 되는 영역
- 초기화가 되지 않음
heap Area(힙 영역) :
- 배열과 모든 인스턴스 객체가 할당되는 영역
- 자동 초기화가 진행됨.
static Area(or Method Area ):
- 소드의 바이트 코드 , static 변수 및 필드 가 할당됨.
예시 코드를 보자
public class MemoryExample {
static int staticField = 10; // static 필드
int instanceField = 20; // 인스턴스 필드
static void staticMethod() {
System.out.println("Static Method");
}
void instanceMethod() {
System.out.println("Instance Method");
}
public static void main(String[] args) {
int localVar = 30; // 로컬 변수
MemoryExample.staticMethod(); // static 메서드 호출
System.out.println(MemoryExample.staticField); // static 필드 접근
MemoryExample example = new MemoryExample(); // 객체 생성
example.instanceMethod(); // 인스턴스 메서드 호출
System.out.println(example.instanceField); // 인스턴스 필드 접근
}
}
메모리 할당 설명
- 클래스 로드 시점
staticField
:
- 메모리 영역: 메서드 영역(Method Area)에 저장된다.
- 설명:
static
필드로, 클래스가 로드될 때 메서드 영역에 저장된다. 프로그램 종료 시까지 메모리에 존재한다.
staticMethod()
:
- 메모리 영역: 메서드 영역(Method Area)에 저장된다.
- 설명:
static
메서드로, 클래스가 로드될 때 메서드 영역에 저장된다. 프로그램 종료 시까지 메모리에 존재한다.
- 메인 메서드 실행 시점
localVar
:
- 메모리 영역: 스택 영역(Stack Area)에 저장된다.
- 설명: 메인 메서드의 로컬 변수로, 메인 메서드의 스택 프레임에 저장된다. 메인 메서드가 종료되면 스택에서 제거된다.
MemoryExample.staticMethod()
호출:
- 메모리 영역: 메서드 영역(Method Area)에 저장된다.
- 설명: 이미 메서드 영역에 로드된
staticMethod()
를 호출한다. 별도의 메모리 할당 없이 실행된다.
MemoryExample.staticField
접근:
- 메모리 영역: 메서드 영역(Method Area)에 저장된다.
- 설명: 이미 메서드 영역에 저장된
staticField
의 값을 읽어온다. 별도의 메모리 할당 없이 접근된다.
- 객체 생성 시점
example
객체:
- 메모리 영역: 힙 영역(Heap Area)에 저장된다.
- 설명:
new MemoryExample()
을 통해 생성된 객체로, 힙 영역에 저장된다. 객체에 대한 참조는 스택 영역에 저장된다.
example.instanceField
:
- 메모리 영역: 힙 영역(Heap Area)에 저장된다.
- 설명: 객체 생성 시 함께 힙 영역에 저장된다. 객체가 메모리에 존재하는 동안 접근 가능하다.
example.instanceMethod()
호출:
- 메모리 영역: 메서드 영역(Method Area)에 저장된다. 메서드 코드가 저장되며, 호출 시 스택 영역(Stack Area)에 스택 프레임이 생성된다.
- 설명: 인스턴스 메서드는 메서드 영역에 저장되지만, 호출될 때마다 스택 프레임이 생성되어 지역 변수와 매개 변수를 저장한다.
메모리 할당 요약
- 메서드 영역 (Method Area):
static
필드 (staticField
)
static
메서드 (staticMethod()
)
- 인스턴스 메서드 (
instanceMethod()
)
- 스택 영역 (Stack Area):
- 로컬 변수 (
localVar
)
- 메인 메서드와
instanceMethod()
호출 시 생성되는 스택 프레임
- 힙 영역 (Heap Area):
- 인스턴스 필드 (
instanceField
)
- 객체 (
example
)