JAVA,객체지향

메서드 Stack 메모리

25G 2021. 10. 27. 21:06

기본적인 자료구조 중에 Queue와 Stack이 있다.

 

쉽게 말하면 일을 처리하는 과정에 큐는 원통처럼 입력과 출력이 각각의 위치에서 이루어지고

스택은 출구가 하나여서 하노이탑에 한 부분처럼 입력과 출력이 한 부분에서 이루어진다.

 

자바라는 언어는 인간이 이해할수 있는 언어지 엄밀히 따지면 컴퓨터 언어가 아니다.. java파일은 인간이 이해할 수 있는 파일이라는 뜻이다. 

그럼 이 .java파일을 JVM을 위해서 해석을 한다(컴퓨터가 이해할 수 있도록)

그렇게. class파일이 만들어지면 이. class파일은 JVM이 받아서 컴퓨터가 일을 처리할 수 있도록 해석을 한다.

 

JVM 일처리 순서

1.. class파일 로드

2. Static 찾기

3. main 메서드 실행

    -main 코드 영역이 열린다. (main메서드는 중괄호로 감싸 져 있음) 큐에 순서대로 등록

i는 입력 O는 출력

그럼 제일 처음 큐에 있는 19번 라인에 소스코드가 실행이 된다.

그럼 위에 라인들을 실행하다가 a()라는 메서드를 호출하는 소스코드를 만났을 때 다음과 같이 큐가 하나 더 만들어진다.

다음과같이 등록된다. 그러면 21번 라인에서 a() 함수를 호출했으니 22번 라인을 진행하는 것이 아닌 점프 해서 6번 라인이 실행된다. 그리고 a() 메서드는 스택에 등록된다.

그리고 a() 함수가 b() 함수를 호출한다

 

그럼 다시 점프해서 a()가 실행되다 말고 13번 라인으로 점프한다.

 

stack의 특성상 그림을 보면 알 수 있듯이 마지막에 들어온 자료가 가장 먼저 나가는 구조라는 것을 인지하고 흐름을 이 애해야 하는데

그럼 여기까지에 흐름을 봤을 때 위. class파일의 흐름은

19 ->20 ->21 -> 점프 ->6 -> 점프 ->13 ->14 ->15 (b함수가 끝나면 스택 영역에서 사라진다 b함수 pop) ->

6 ->7 -> 8 ->9(a함수 또한 끝나면 필요 없으니 메모리 스택 영역에서 사라진다 a함수 pop)->21 (main메서드가 종료돼서 stack영역에서 main메서드가 pop 되고 자바 프로그램은 종료된다. stack영역에서 아무것도 없기 때문)

 

자바라는 언어 자체가 c와는 다르게 메모리 관리를 java에서 자체적으로 해주기 때문에 위와같은 메모리관리를 모르고 자바를 하다 보면 이해가 안 되는 부분이 생길 수밖에 없다.

그렇기 때문에 자바를 잘 다루기 위해서는 이런 내부적으로 해주는 이런 마법을 알고 있을 필요가 있다고 생각한다.