자바의 스택 / 프레임 구조

2021. 8. 13. 19:43Programming 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

 

Chapter 2. The Structure of the Java Virtual Machine

Conditional branch: ifeq, ifne, iflt, ifle, ifgt, ifge, ifnull, ifnonnull, if_icmpeq, if_icmpne, if_icmplt, if_icmple, if_icmpgt if_icmpge, if_acmpeq, if_acmpne.

docs.oracle.com

 

3. 종립님 블로그(존경합니다) https://johngrib.github.io/wiki/jvm-stack/#fn:2-5-2

 

JVM stack과 frame

 

johngrib.github.io

 

'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