Pink Spider/JVM 에서 쓰이는 stack 의 종류

Created Tue, 01 Apr 2025 15:44:09 +0900 Modified Mon, 08 Dec 2025 08:41:47 +0900
597 Words 3 min

JVM(Java Virtual Machine)에서는 내부적으로 여러 종류의 스택(stack) 을 사용합니다. 각각의 스택은 JVM의 실행 및 메모리 관리 등에서 중요한 역할을 합니다. 주요 스택 종류는 다음과 같습니다:


🧠 1. Java Virtual Machine Stack (또는 Thread Stack)

  • 설명: 각 스레드(thread) 마다 하나씩 존재하는 스택입니다.
  • 역할: 메서드 호출 시 생성되는 스택 프레임(stack frame) 을 저장합니다. 각 프레임에는:
    • 지역 변수(Local Variables)
    • 피연산자 스택(Operand Stack)
    • 메서드 반환 주소 등이 포함됨
  • 예외: 스택 오버플로우 발생 시 StackOverflowError 발생

🔁 2. Native Method Stack

  • 설명: 네이티브 메서드(C로 구현된 JNI 메서드 등) 호출 시 사용되는 스택입니다.
  • 역할: C/C++ 등 JVM 외부 언어로 구현된 메서드에서 필요한 데이터를 저장
  • 특이사항: 일부 JVM 구현에서는 Java 스택과 통합되기도 함

💾 3. Operand Stack (피연산자 스택)

  • 설명: 위의 JVM Stack의 각 스택 프레임 내에 존재하는 스택입니다.
  • 역할: 바이트코드 명령어가 실행 중인 중간 연산 결과를 임시로 저장
  • 예시: iadd, imul 같은 바이트코드 명령은 이 스택에서 피연산자를 꺼내 계산

🧱 4. Call Stack (호출 스택)

  • 설명: JVM Stack의 구조적인 측면을 지칭하는 용어로, 메서드 호출의 흐름을 나타냅니다.
  • 역할: 현재 실행 중인 메서드부터 시작해 호출된 메서드들이 차곡차곡 쌓여 있음
  • 특징: 디버깅 시 “Stack Trace"로 확인 가능

추가로 JVM에는 스택 이외에도 다음과 같은 메모리 영역이 있습니다:

  • Heap: 객체 및 배열 저장
  • Method Area (또는 Metaspace in Java 8+): 클래스 메타데이터, 정적 변수 등 저장
  • Program Counter (PC) Register: 현재 실행 중인 명령어의 주소 보관