반응형
✅ 호출 스택 Call Stack
메서드 호출의 실행 순서를 추적하는 자료구조이다.
- 메인 메서드(main method)가 호출되면, 메서드의 스택 프레임이 호출 스택에 쌓인다.
- 메인 메서드 내에서 다른 메서드를 호출하면, 해당 메서드의 스택 프레임이 호출 스택의 맨 위에 쌓인다.
- 호출된 메서드 내에서 다른 메서드를 호출하면, 해당 메서드의 스택 프레임도 호출 스택의 맨 위에 쌓인다.
- 호출된 메서드가 실행을 완료하고 반환(return)할 때, 해당 메서드의 스택 프레임을 호출 스택에서 제거한다.
- 호출된 메서드 내에서 예외가 발생하면, 해당 예외를 처리하기 위해 호출 스택을 따라서 예외 처리 구문으로 이동한다.
- 호출 스택에 있는 메서드들은 LIFO(Last-In-First-Out) 방식으로 처리되어, 호출 스택의 맨 위에는 현재 실행 중인 메서드의 스택 프레임이 위치한다.
💡 JVM 스택 JVM Stack
- 각 스레드마다 생성한다.
- 해당 스레드가 호출한 메서드에 대한 정보를 저장한다.
- 스택 프레임(Call Frame)은 메서드의 반환 주소를 포함하여 현재 실행 중인 메서드의 상태를 저장한다.
- 메서드가 반환되면 해당 스택 프레임을 제거한다.
- 메서드 호출 시 지역 변수, 매개 변수, 메서드 반환 값 등을 저장한다.
💡 네이티브 스택 Native Stack
- 네이티브 코드에서 호출된 메서드에 대한 정보를 저장한다.
- JNI, Java Native Interface를 통해 Java 코드에서 네이티브 코드로 호출되는 경우에 사용한다.
- JVM 스택과는 별개의 자료구조이다.
- 네이티브 메서드가 반환되면 해당 스택 프레임을 제거한다.
💡 예제
class cs {
public static void main(String[] args) { // 호출 스택의 시작점
System.out.println("Hello"); // 출력문이 실행됨
} // 호출 스택의 끝점
}
- 프로그램 시작: JVM(main 스레드)
- main() 메서드 호출
- System.out.println() 메서드 호출
- 출력 문자열 "Hello" 출력
- System.out.println() 메소드 종료
- main() 메소드 종료
- 프로그램 종료: JVM(main 스레드)
class cs {
public static void main(String[] args) { // 호출 스택의 시작점
System.out.println("Hello"); // 출력문이 실행됨
} // 호출 스택의 끝점
}
반응형
'기타 > 백엔드 기초' 카테고리의 다른 글
자바 Java | 패키지(Package)의 개념과 활용 방법 (0) | 2023.03.07 |
---|---|
자바 Java | 상속(Inheritance) 개념과 구현 방법: 단일 상속, 상속 구현, super, Object 클래스 (0) | 2023.02.16 |
자바 Java | 생성자(Constructor) 개념: 객체 초기화의 핵심, this() 키워드, 생성자 간 호출 방법 (0) | 2023.02.16 |
자바 Java | 다형성(Polymorphism) 핵심: 오버로딩(Overloading)과 출력 다양성 (1) | 2023.02.16 |
자바 Java | 객체지향 프로그래밍(OOP)의 핵심 개념: 객체, 클래스, 메소드, 참조 변수에 대한 이해와 활용 방법 (0) | 2023.02.16 |
자바 Java | 문자열 다루기: String 클래스와 커맨드 라인 인자 사용 방법 (0) | 2023.02.16 |
자바 Java | 배열(Array) 다루기: 선언, 생성, 접근, Arrays 클래스 활용 (0) | 2023.02.15 |
자바 Java | break문과 continue문: 사용 방법과 주의할 점 (0) | 2023.02.15 |