스택(stack) : 밑이 막힌 상자 위에 "차곡차곡 쌓인다"는 의미
프로그래밍에서 스택(stack)은 데이터를 차곡차곡 쌓아올린 형태의 자료구조를 의미한다.
위와 같이 데이터가 순서대로 쌓이고, 가장 마지막에 삽입된 자료가 가장 먼저 삭제되는 구조로 이루어져 있다.
정해진 방향으로만 쌓을 수 있으며, top으로 정한곳을 통해서만 접근할 수 있다.
삽입되는 자료는 top이 가리키는 가장 맨 위에 쌓이고, 삭제하는 자료도 top을 통해 삭제가 가능하다.
호출 스택(call stack) : 메서드 수행에 필요한 메모리가 제공되는 공간 = 메서드의 작업공간
메서드가 호출되면 호출 스택에 메서드가 작업을 위해 필요한 메모리 공간이 할당되고,
메서드가 종료되면 호출 스택에 할당되었던 메모리 공간이 해제된다.
JVM의 메모리는 메서드영역(Method Area), 호출스택(Call Stack), 힙(Heap) 영역으로 구성되어 있다.
- 메서드영역(Method Area) : 클래스 정보와 클래스변수가 저장되는 곳
- 호출스택(Call Stack) : 메서드의 작업공간. 메서드가 호출되면 메서드 수행에 필요한 메모리공간을 할당받고 메서드가 종료되면 사용하던 메모리를 반환한다.
- 힙(Heap) : 인스턴스가 생성되는 공간. new연산자에 의해서 생성되는 배열과 객체는 모두 여기에 생성된다.
아래와 같은 메서드가 실행되는 경우,
class CallStackTest {
public static void main(String[] args) {
firstMethod();
}
static void firstMethod() {
secondMethod();
}
static void secondMethod() {
System.out.println("secondMethod()");
}
}
하나의 스택에서는 하나의 메서드만 실행되고 나머지 메서드는 대기상태이다.
CallStackTest 실행시 호출 스택의 변화는 아래와 같다.