Juuunew 살아남기

[JAVA] 메모리 - Stack 본문

Language/JAVA

[JAVA] 메모리 - Stack

Juuunew 2022. 12. 27. 14:45

Stack 메모리

함수나 메서드의 지역 변수(local variable)와 매개 변수(parameter)가 저장된다.

함수나 메서드가 호출될 때마다 스택 프레임이 스택 메모리 안에 쌓인다.

  • Heap 영역에 생성된 Object 타입 데이터의 참조값이 할당
  • primitive type(원시타입)의 데이터가 값과 함께 할당
    • boolean, char, short, int, long, float, double
  • 하나의 Thread 당 하나의 Stack을 가짐 (각 Thread에서 다른 Thread의 Stack 영역에 접근 불가

🌟 스택 프레임

  • 하나의 메서드를 호출하는데 필요한 메모리 덩어리
  • 메서드 하나 당 하나의 스택 프레임이 존재
  • 메서드를 호출하기 직전 스택 프레임을 자바 Stack 메모리에 생성한 후 메서드를 호출
  • Stack 메모리는 메서드가 사용하는 전용 메모리이며, 메서드들은 각각의 메서드에서 사용하는 메모리를 스택 프레임 형태로 만듦

예제와 함께 스택 메모리와 스택 프레임의 생성 과정을 살펴보자.

  1. main 메서드가 실행되면서 스택 메모리에는 main 메서드의 스택 프레임이 생성된다.
  2. 매개변수인 args 에 대한 공간이 main 스택 프레임 내부에 생성된다.
  3. main 스택 프레임에 31이라는 값을 가진 공간을 생성 후 변수 a의 이름을 붙여준다.
  4. age 메서드의 스택 프레임 생성.
  5. 매개변수 n 의 공간 할당. (매개변수로 a를 전달했기에 a의 값인 31을 복사)
  6. 전달받은 a의 값에 10을 곱한 값을 변수 b에 저장. (40)
  7. b(40)을 main 메서드의 a에 리턴해주면서 age 메서드의 스택 프레임 삭제
  8. main 메서드의 변수 a의 값을 리턴 받은 b(40)로 변경

Stack 메모리에서는 함수 호출과 종료에 따라 자동적으로 메모리 관리가 이루어지므로 따로 관리해줄 필요는 없다.

하지만 함수나 메서드가 다른 무언가를 호출하고 또 그 안에서 호출하고 반복적으로 호출을 계속하면 스택 프레임이 계속 생성되어 어느 순간 스택 메모리에 남은 공간이 없어져 어플리케이션이 다운되어 버린다.

💡 공부 중 정리하는 내용이므로 부족한 부분이 있을 수 있습니다.

💡 참고자료

유튜브 - 쉬운코드