<영상공부> 변수와 객체와 메모리의 관계(Stak과 Heap)

김조은·2023년 9월 21일

영상공부 모음

목록 보기
18/49

movie

  • 어플리케이션 : 컴퓨터가 실행할 수 있는 명령어들의 집합
  • 런타임 = 실행상태
  • CPU : 명령어를 실행하는 주체
  • 메모리 : 어플리케이션이 상주하고 있음

[메모리 구조 stak & heap]

Stak메모리

함수, 메서드의 지역 변수 & 매개 변수가 저장됨 → 호출 시, 스택 프레임이 쌓임

스택의 예제

    public class Main {
       public static void main(String[]args) {   //매개변수 : args
           int a = 100;
           a = wow(a);
        }
     public static int wow(int num) {
     int b = num * 4;
     return b;
     }
   }

  1. args라는 스택 프레임과 함께 a에는 100이라는 스택 공간이 생김

  1. num이라는 매개변수 공간과 함께 wow메서드를 호출해 num에 100값이 카피되어 저장됨

  1. 100으로 저장된 num에 * 4를 한 400의 값이 b에 저장됨

  1. b의 값을 a라는 변수에 리턴하면 호출이 끝났기 때문에 메모리에서 사라짐
  2. a라는 변수에 400을 넣어줌

Heap메모리

객체가 저장됨

힙의 예제

    public class Main {
       public static void main(String[]args) {   //*매개변수* : args
           Counter c = new Counter(); //*지역변수* : c
       }
   }
     public class Counter {
         private int state = 0;   //*인스턴스* 변수
         public void increment() { state++; }
         public int get() { return state; }
   }

  1. args, new Counter(생성자)의 객체의 스택 프레임이 생김
  2. 힙에 Counter클래스의 객체가 생성 (state = 0)

  1. Counter클래스의 생성자의 처리가 끝났기 때문에 스택프레임이 사라짐
  2. c라는 이름의 변수를 만들고, Counter c의 주소값이 저장되고 힙메모리에 있는 객체의 주소값을 가르킴

0개의 댓글