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

hyo_·2021년 1월 8일
0

JAVA 

목록 보기
5/20

※ 본 글은 아래 도서를 공부한 후 정리한 내용입니다.

📚 스프링 입문을 위한 자바 객체지향의 원리와 이해


예제 코드의 T메모리 변화를 살펴보면서 블록 구문과 메모리 관계가 어떠한지 알아보자!

(T메모리 -> TIL : 다시 보는 main() 메서드: 메서드 스택 프레임 참고)

Study3.java 파일

1 public class Study3{
2 	public static void main(String[] args) { 
3		int i = 10;
4		int k = 20;
5
6		if( i == 10 ) {
7			int m = k + 5;
8			k = m;
9		} else {
10			int p = k + 10;
11		}
12 // k = m + p
13	}
14 }

① 5번째 줄 까지 실행했을 때


② if문을 실행하게 되면 if ~ else 블록 중 해당하는 블록의 스택 프레임이 생성

  • 6번째 줄 같은 경우 참이기 때문에 if문의 참인 블록 스택 프레임이 만들어진다. 그때의 위치는 main() 메서드 스택 프레임 안에 중첩되어 생성된다.

③ 7, 8번째 줄 실행 후 if문의 참인 블록 스택 프레임안에 m변수의 공간이 생기고 25저장. main 스택 프레임 안에 있는 k값에 m 값 저장

④ 9번째 줄에서 i=10 if문의 닫는 중괄호를 만나면 if 블록 스택 프레임은 스택 영역에서 사라짐

  • 만약 주석 처리되어 있는 12번째 줄 k = m + p를 주석을 풀고 실행하게 된다면 12번째 줄을 실행할 당시 T메모리에 m,p가 존재 하지 않기 때문에 컴파일러 오류가 난다.

오류내용

m cannot be resolved to a variable
p cannot be resolved to a variable

⑤ 이후 과정은 study1과 동일
( TIL : 다시 보는 main() 메서드: 메서드 스택 프레임 참고 )



🌞 Check it!! 🌞

  • if문을 실행 시 if ~ else 블록 중 해당하는 블록의 스택 프레임이 생성

  • if문의 닫는 중괄호를 만나면 블록 스택 프레임 소멸 -> 소멸 후 if문 블록 스택 프레임 안의 변수를 사용할 시 오류

profile
🎓의지적인 삶을 살자!😊

0개의 댓글