목차
메모리 사용 영역
JVM(Java Virtual Machine)은 운영체제에서 메모리 영역을 할당받는다.
메모리 영역은 메소드 영역(Method Area), 힙 영역(Heap Area), JVM 스택(Stack)으로 구분된다.
메소드 영역(Method Area)
컴파일된 바이트 코드(.class)가 저장된다.
이 때 클래스 로더로 읽어 클래스별로 정적 필드(static field), 상수(constant), 메소드 코드, 생성자(constructor) 코드 등을 분류해 저장한다.
힙 영역(Heap Area)
객체와 배열이 생성된다.
힙 영역에 생성된 객체와 배열은 JVM 스택 영역의 변수나 다른 객체의 필드에서 참조한다.
참조하는 변수나 필드가 없다면 자동으로 Garbage Collector에 의해 힙 영역에서 제거된다.
JVM 스택 영역
메소드를 호출할 때마다 프레임(Frame)이 추가(push)되며, 메소드가 종료되면 프레임을 제거(pop)하는 동작을 수행한다.
프레임 내부에는 로컬 변수 스택이 있는데, 스택 영역에 변수가 생성되는 시점은 초기화가 될 때, 즉 최초로 변수에 값이 저장될 때이다.
기본 타입의 스택 영역
변수는 선언된 블록 안에서만 존재하며, 선언된 블록이 끝나면 스택에서 제거된다.
선언된 블록 외부에서 사용할 수 없다.
1
2
3
4
5
6
7
8
9
10
11
|
void method() {
char v1 = 'A';
if(v1 == 'A') {
int v2 = 100;
double v3 = 3.14;
} // 선언된 블록을 빠져나가면 소멸
boolean v4 = true;
}
|
cs |
참조 타입의 스택 영역
변수는 스택 영역에 힙 영역의 객체 주소를 가진다.
1
2
3
4
|
void method() {
int[] scores = {10, 20, 30};
}
|
cs |
배열 변수인 scores는 스택 영역에 생성되지만 실제 배열의 값은 힙 영역에 생성된다.
자바에서는 배열을 객체로 취급한다.
'개발 관련 > Java' 카테고리의 다른 글
[혼공자] java - 배열(Array) (0) | 2022.04.24 |
---|---|
[혼공자] java - 참조 타입(Reference Type) (0) | 2022.04.24 |
[혼공자] java - 기본 타입(Primitive Type)과 타입 변환 (0) | 2022.04.24 |
[혼공자] 자바 프로그램 실행 과정 (0) | 2022.04.24 |
[혼공자] java란? (0) | 2022.04.24 |