Stack 메모리의 영역
※ 스택 프레임(Stack Frame)
- 하나의 메서드를 호출하는데 필요한 메모리덩어리
- 메서드 하나당 하나의 스택 프레임이 존재
: 하나의 메서드에 필요한 메모리 덩어리를 묶어서 스택 프레임(Stack Frame)이라고 한다.
하나의 메서드당 하나의 스택 프레임이 필요하며, 메서드를 호출하기 직전 스택프레임을 자바 Stack에 생성한 후 메서드를 호출하게 된다. Stack 메모리는 메서드가 사용하는 메서드 전용메모리이며, 메서드들은 각각의 메서드에서 사용하는 메모리를 스택 프레임 형태로 만드는 것이다.
스택 프레임의 구성요소
- 지역변수
- 매개변수
- 리턴값을 위한 공간
『 메서드가 호출될 때마다 하나의 스택 프레임이 만들어지며 메서드의 호출이 끝나면 자동으로 스택 프레임은 제거된다. 』
Ex)
/*
스택 프레임 실습을 위한 예제
*/
public class StackMain {
public static int sum(int a, int b){
int c = a + b;
return c;
}
public static void main(String[] args){
int x=10;
int y=20;
int z = sum(x, y);
System.out.println(z);
}
}
l sum()의 스택 프레임의 구성
n int a;
n int b;
n int c;
n return value;
l main()의 스택 프레임의 구성
n int x;
n int y;
n int z;
n String[] args
|
스택 메모리 영역 |
sum() 스택 프레임 |
return value |
int c |
|
int b |
|
int a |
|
|
|
main() 스택 프레임 |
String[] args |
int z |
|
int y |
|
int x |
Heap 메모리의 영역
Ex)
/*
힙메모리의 개념을 이해하기 위한 예제
*/
class Top {
public int a = 10;
public int b = 20;
public int c = 30;
public int sum(){
int d = a + b + c;
return d;
}
}
public class HeamMain {
public static void main(String[] args){
Top t = new Top();
Top s = new Top();
s.a=1;
s.b=2;
s.c=3;
int x = t.sum();
int y = s.sum();
System.out.println(x);
System.out.println(y);
}
}
Heap 메모리 영역 |
a=10 |
b=20 |
c=30 |
|
a=1 |
b=2 |
c=3 |
|
String[] args |
int y |
int x |
|
Top t |
위의 예제에서 참조 변수인 t와 s는 스택 프레임에 생성되기 때문에 스택 메모리를 사용한다. 여기서 스택에 생성되는 t와 s의 메모리는 참조값 자체를 저장하기 위한 메모리이다. new Top()을 했을 때 생성되는 Top형에 대한 메모리는 힙영역에 생성된다.
'개발 > 자바' 카테고리의 다른 글
JAVA 기초4 - 스태틱(static) (0) | 2020.11.14 |
---|---|
JAVA 기초3 - 접근제어 (0) | 2020.11.11 |
JAVA 기초2 - 자바 프로그램의 실행구조와 JVM (0) | 2020.11.11 |
JAVA 기초1 - 객체지향 특징 및 기본데이터 타입 (0) | 2020.11.11 |