자바의 스택 / 프레임 구조
2021. 8. 13. 19:43ㆍProgramming Language/Java
자바가 실행되고 JVM 스레드 생성 시, 하나의 스레드 당 하나의 스택이 생성된다.
이 스택은 0개 이상의 프레임을 담는데,
프레임은 함수 실행 시 생성되는 변수, 연산 스택, 상수 풀 참조들을 담는다.
1. JVM 스택
공식 문서에 JVM 스택에 대해 깔끔히 정의되어 있다. 스레드가 하나 생성될 시, 그 스레드의 스택 또한 하나 생성된다. 이 스택은 프레임이란 친구를 저장하며, 자바 외 다른 일반적인 언어들의 스택과 유사한 기능을 수행한다.
그렇다면 이 프레임이란 친구는 무엇일까?
2. frames
프레임은 함수 실행 시 생성되며 데이터나 부분적인 결과값들을 저장한다. 타 언어들과 마찬가지로 함수가 실행될 때 scope가 생기는데, 프레임에선 이 scope 내의 값들을 저장한다고 보면 된다. 프레임은 다음과 같이 세 개의 부분으로 구성되어 있다.
1. Local Variables
- scope 내 지역 변수들. 지역 변수들은 array 형태로 저장된다.
2. Operand Stack
- 연산을 위한 작업 공간.
3. Run-time Constant Pool Reference
- Run-time constant pool table은 numeric literal 등 컴파일 시 확인해야 하는 상수들부터 런타임 시 확인해야 하는 메서드 및 필드 값까지, 다양한 상수들을 담는 테이블.
- 이러한 런타임 상수 풀의 참조를 가짐.
참고
1. 오라클 자바 8 공식문서: https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html
3. 종립님 블로그(존경합니다) https://johngrib.github.io/wiki/jvm-stack/#fn:2-5-2
'Programming Language > Java' 카테고리의 다른 글
JVM의 Garbage Collection 과정 (0) | 2021.08.20 |
---|---|
[String] equals 메서드와 == 연산의 차이 (0) | 2021.08.19 |
자바의 접근 제어자 (0) | 2021.08.11 |
자바의 참조 변수(Reference Type) (0) | 2021.08.10 |
배열 (0) | 2021.08.08 |