본문 바로가기
JAVA

8. 호출스택

by seongju.lee 2022. 9. 18.

호출스택

  • 메서드가 수행에 필요한 메모리가 제공되는 공간
  • 메서드가 호출되면 호출스택에 메모리 할당, 종료되면 해제
  • 하나의 스택에서는 하나의 메서드만 실행된다. 나머지는 대기중인 상태로 유지된다.
  • 사실상 프로그램의 흐름(시작->종료)이라고 할 수 있을 것 같다.

위 설명을 표현하면 아래와 같다.

main()이 println()을 호출

  1. main 메서드가 호출이 됨.
  2. println() 메서드를 main()이 호출 함.
  3. main()은 실행상태에서 대기상태로 전환되며, println이 실행상태가 됨.
  4. 즉, 아래 있는 메서드가 위의 메서드를 호출한 것.

 

println()이 종료

  1. println()이 종료되고, 스택에 할당되어 있던 메모리가 해제
  2. main()이 다시 실행상태로 변환 됨.

 

위의 예시처럼, 기본적으로 하나의 스택에서는 하나의 메서드만 실행되는 것을 알 수 있다.(나머지는 대기상태)

쓰레드마다 스택은 가지고 있기 때문에, 멀티쓰레드를 통해서 여러 개의 스택을 다룰 수 있다.

 

* OS와 밀접한 연관있음(프로세스의 주소공간쪽 참고할 필요가 있을 것 같음)