블록 구문과 메모리 : 블록 스택 프레임

public class Start3 {
    public static void main(String[] args) {
        int i = 10;
        int k = 20;
        
        if (i == 10) {
            int m = k + 5;
            k = m;
        } else {
            int p = k + 10;
            k = p;
        }
        
        //int nn = m + p // m, p는 if문 안에서 선언된 변수이므로 사용 불가능
    }
}
  1. int k = 20 ; 까지 실행된 경우
    1. T 메모리 구조 ( 클래스 메타 데이터 적재 )
    1. main 메서드 실행 ⇒ 스택메모리 적재
    1. main 메서드이 args 인자가 main 프레임에 쌓인다.
    1. int i 가 10으로 초기화되며, (10 의 값을 상수풀에서 가져와서 i 에 10을 대입)
  1. if ( i == 10 )
    1. i == 10 은 true
    1. { : 의 경우 중괄호가 열린경우 스택 프레임이 생성됩니다.
  1. int m = k+5
    1. k 는 if 블록 스택의 입장에서 이미 아래에 깔린 변수이기에, 가져다가 사용할 수 있습니다.
    1. k == 20 + 5 의 연산값인 25을 이용해 m 을 초기화합니다.
  1. 닫는 중괄호는 if 블록 스택 영역을 스택 영역에서 제거
public class Start3 {
    public static void main(String[] args) {
        int i = 10;
        int k = 20;
        
        if (i == 10) {
            int m = k + 5;
            k = m;
        } else {
            int p = k + 10;
            k = p;
        }
        
        //int nn = m + p // m, p는 if문 안에서 선언된 변수이므로 사용 불가능
    }
}
  • // int nn = m + p ; 가 주석이 해제된다면
  • if 블록 스택 안에 지역변수
    • m
    • p

    가 존재했지만, if 블록의 닫는 중괄호 로 인하여 스택 프레임이 소멸하였다.

    고로, 해당 지역변수는 이제 사용이 불가능한 것입니다.


Uploaded by N2T