'자바 스택 메모리'에 해당되는 글 1건

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 s

Top t



위의 예제에서 참조 변수인 t s 스택 프레임에 생성되기 때문에 스택 메모리를 사용한다. 여기서 스택에 생성되는 t s 메모리는 참조값 자체를 저장하기 위한 메모리이다. new Top() 했을 생성되는 Top형에 대한 메모리는 힙영역에 생성된다.



반응형
블로그 이미지

아쭝구리

,