✅ 스택 영역


✏️ JavaMemoryMain1

package memory;

public class JavaMemoryMain1 {

  public static void main(String[] args) {
    System.out.println("main start");
    method1(10);
    System.out.println("main end");
  }

  static void method1(int m1) {
    System.out.println("method1 start");
    int cal = m1 * 2;
    method2(cal);
    System.out.println("method1 end");
  }

  static void method2(int m2) {
    System.out.println("method2 start");
    System.out.println("method2 end");
  }
}



🖥️ 실행 결과



⚙️ 호출 과정

  • 처음 자바 프로그램을 실행하면 main()을 실행한다. 이때 main()을 위한 스택 프레임이 하나 생성된다.
    • main() 스택 프레임은 내부에 args라는 매개변수를 가진다.
  • main()method1()을 호출한다. method1() 스택 프레임이 생성된다.
    • method1()m1, cal 지역 변수(매개변수 포함)를 가지므로 해당 지역 변수들이 스택 프레임에 포함된다.
  • method1()method2()를 호출한다. method2() 스택 프레임이 생성된다. method2()m2 지역 변수(매개변수 포함)를 가지므로 해당 지역 변수가 스택 프레임에 포함된다.



⚙️ 종료 과정

  • method2()가 종료된다. 이때 method2() 스택 프레임이 제거되고, 매개변수 m2도 제거된다. method2() 스택 프레임이 제거되었으므로 프로그램은 method1()로 돌아간다. 물론 method1()을 처음부터 시작하는 것이 아니라 method1()에서 method2()를 호출한 지점으로 돌아간다.
  • method1()이 종료된다. 이때 method1() 스택 프레임이 제거되고, 지역 변수(매개변수 포함) m1, cal도 제거된다. 프로그램은 main()으로 돌아간다.
  • main()이 종료된다. 더 이상 호출할 메서드가 없고, 스택 프레임도 완전히 비워졌다. 자바는 프로그램을 정리하고 종료한다.



📚 정리

  • 자바는 스택 영역을 사용해서 메서드 호출과 지역 변수(매개변수 포함)를 관리한다.
  • 메서드를 계속 호출하면 스택 프레임이 계속 쌓인다.
  • 지역 변수(매개변수 포함)는 스택 영역에서 관리한다.
  • 스택 프레임이 종료되면 지역 변수도 함께 제거된다.
  • 스택 프레임이 모두 제거되면 프로그램도 종료된다.
profile
매일 성장하는 주니어 개발자의 기록📝

0개의 댓글