카테고리 없음

T 메모리 구조

김코식 2022. 12. 10. 06:19

T메모리 구조


데이터 저장 영역을 스태틱, 스택, 힙 영역으로 분리하여 T메모리 구조라고 지칭한다.

모든 자바 프로그램은 JVM을 통해 실행되는데 프로그램이 실행되면 JVM은 os로부터 프로그램을 수행하는데 필요한 메모리를 할당 받는다.

JVM이 자바 소스 코드를 어떻게 OS에서 실행하는지 의 과정을 먼저 알아보자

  1. 자바 소스 코드인 JVM.java 파일을 컴파일러가 자바 바이트 코드인 .class로 변환한다
  2. .class코드를 jvam의 클래스 로더에게 보낸다
  3. 클래스 로더는 JVM런타임 데이터 영역으로 로딩하여 JVM의 메모리에 올린다

 

이 메모를 가지고 JVM은 용도에 따라 구분하여 사용하게 된다.

 

 

가장 대표적인 예로 main() 메소드 실행으로 T구조를 이해해보자

 

메인 메소드가 실행되면 스택 프레임이 스택 영역에 할당된다.

그리고 스택 프레임 내부에는 메인 메소드에 선언된 변수에 대한 공간을 할당해주고

메인 메소드의 인자 args 를 저장할 변수 공간을 스택 프레임의 가장 밑에 확보한다

그 후 메인 메소드의 모든 코드가 실행이 되었다면 스택 프레임은 소멸하게 된다.

 


스택 프레임이란


메모리의 스택 영역은 함수의 호출과 관계되는 지역 변수와 매개 변수가 저장되는 영역이다.

함수가 호출되면 스택에는 함수의 매개변수, 호출이 끝난 뒤 돌아갈 반환 주소 값, 함수에서 선언된 지역 변수 등이 저장된다.

이렇게 스택 영역에 차례대로 저장되는 함수의 호출 정보를 스택 프레임 이라고 한다.

이러한 스택 프레임 덕분에 함수의 호출이 모두 끝난 뒤 해당 함수가 호출되기 이전의 상태로 돌아갈 수 있다.

스택 프레임 동작 방식

 


 

프로그램이 실행되면 가장 먼저 main()함수가 호출되어 main()함수의 스택 프레임이 스택에 저장

func1() 함수 호출 시 해당 함수의 매개변수, 반환 주소 값, 지역변수 등의 스택 프레임이 스택에 저장

func2() 함수도 마찬가지로 저장

 

 

func2() 함수의 모든 작업이 완료되면 반환 되어 스택에서 제거

func1() 함수도 종료 시 마찬가지로 제거

이처럼 스택은 나중에 저장된 데이터가 가장 먼저 나가는 LIFO ( Last in First Out)방식이다.

 


https://velog.io/@95qwer/%EC%9E%90%EB%B0%94%EC%9D%98-%EB%A9%94%EB%AA%A8%EB%A6%AC1

http://www.tcpschool.com/c/c_memory_stackframe

 

https://velog.io/@acacia__u/Java-JVM-T-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B5%AC%EC%A1%B0