호출 스택(call stack)

Heejeong Choi·2021년 9월 12일
1

Java의 정석 기초편

목록 보기
13/19
post-custom-banner
해당 글은 '자바의 정석 기초편'을 보고 작성 되었습니다.

호출 스택이란?

여러 함수들을 호출하는 스크립트에서 해당 위치를 추적하는 인터프리터를 위한 매커니즘이다. 메서드의 작업에 필요한 메모리 공간을 제공한다.

HOW IT WORKS

class ExampleCallStack {
    public static void main(String[] args) {
        System.out.println("Hello");
    }
}

라는 코드가 있다고 가정을 하자. 당연히 결과물은 콘솔창에 Hello라고 찍힐거라는 것은 우리 모두가 알고있다.

메서드가 호출되면, 호출스택에 호출된 메서드를 위한 메모리가 할당되며, 이 메모리는 메서드가 작업을 수행하는 동안 지역변수(매개변수 포함)들과 연산의 중간 결과 등을 저장하는데 사용된다. 그리고 메서드가 작업을 마치면 할당되었던 메모리 공간은 반환되어 비워지는 메커니즘이다.

자바의 정석에서 위 그림을 보는게 해당 코드를 기반으로 호출 스택을 이해하는데 가장 쉬웠으니, 이 부분을 1번부터 5번까지 설명해보도록 할것이다.

1 - 2 : 우선 해당 예제 코드를 돌리면, JVM에 의해서 메인 메서드가 호출되면서 프로그램이 시작될 것이다. 이 때, 호출스택에는 메인 메서드를 위한 메모리공간이 할당되고 메인 메서드의 코드가 수행되기 시작하는 것이다.

3 : 메인메서드에서 println()를 호출한 상태이다. 아직 메인메서드는 끝난게아니다!!!! 메인메서드는 호출스택에 대기상태로 남아있고 println()의 수행이 시작된다. println 메서드에 의해 Hello가 화면에 출력 되는것이지😎

4 : println()의 수행이 완료되어 호출스택에서 사라지고 자신을 호출한 메인 메서드로 돌아가는데, 대기중이던 메인 메서드는 println()을 호출한 이후부터 수행을 시작한다

5 : 메인메서드에도 더 이상 수행할 코드가 없으므로 종료되고 호출 스택은 완전히 비어지게 되고 프로그램은 종료된다.

profile
Welcome to my velog! I love learning something new to build up my ability in development field. I don't think it is shame not to know, but it is shame to pretend to know about something you don't know.
post-custom-banner

1개의 댓글

comment-user-thumbnail
2023년 12월 18일

컴파일한 프로그램 분해해서 어셈블리단위에서 확인해보면 스택에 출력될 역순 차례대로 코드들이 담기고 꺼내지던데
그런것과 비슷한 매커니즘이군요!

답글 달기