티스토리 뷰

Stack과 Heap은 메모리의 종류이다.

 

두개를 한 곳에 정리하는 이유는 둘은 밀접한 관계를 가지고 있기 때문이다.

Heap을 설명하기 전에 Stack을 먼저 이해해야하는데 

기본적인 Stack의 동작과정은 아래와 같다. 

1)Stack

 

 

           main( ) work( ) more( ) 세개의 메소드와 각 메소드 마다 int 형 abc변수를 넣어 실행시키면 

            stack 메모리는 다음과 같은 변화가 생긴다. 

위에서 실행된 코드부터 Stack메모리에 저장되는데 main()이 가장 위에 있기때문에 a를 가장 먼저 저장한다.

그림에 오류가 있는데 c가 아니라 b다 잘못 넣었다 ㅜㅠ

그 뒤에 있는 b값을 저장한다. 

이것도 마찬가지로 d가 아니라 c다 ㅋㅋ

마지막으로 c값을 저장한다. 

그리고 짜여진 프로그램이 끝나는 지점에서 stack메모리에 pop 현상이 일어난다. 

pop현상은 스택메모리에 저장된값이 삭제되는거라고 이해하면 되는데 이 현상에는 한가지 규칙이있다.

삭제는 가장 늦게 입력된 값부터 삭제를 진행한다.

 즉 전문적으로 말하면 stack 메모리에서 top에 저장된 값부터 pop한다.

마지막 코드가 끝나는 지점

more()의 코드가 가장 마지막에 실행되어서 stack메모리에 top에 위치해 있다. 코드가 순서대로 다 실행되고 나면 이제

stack 메모리 top에 있는 more()은 

pop현상이 일어난다.

 

 

이런식으로 pop현상이 일어나게 되고 마지막에는 a값도 pop현상이 일어나 stack은 초기와 같이 비어있게

된다.  

쉽게 설명해 stack은 임시적으로 메모리를 저장하는 공간이라고 생각할 수 있다. 

Stack과 밀접한 관련이 있는 메모리는 heap인데 이제 Stack의 기본적인 구조를 알았으니 heap을 알아보도록 하자. 

이런 구조의 코드가 있다 a값은 정상적으로 stack에 저장된다. 그리고 a는 a그 자체로 오브젝트이다. 그렇기에 heap에 연결되는 일 없이 stack안에서만 저장되어있다. 

 그런데 Car항목은 다르다 일단 myCar라는 값이 stack에 추가된다. 참조 변수의 이름이 myCar 이므로 stack저장되는 것은 myCar 

그런데 밑에서 new 연산자를 사용해서 Car라는 객체를 heap안에 새로 만들었다. 여기서 car의 값은 heap에 저장되는데, 여기서 주의해야 하는 점은 myCar는 객체가 아니다.  stack저장된 mycar는 heap안에 있는 car객체와 연결되기위한 주소라고 생각하면된다.  

끝으로 stack과 heap에 가장 큰 차이점 이라면 stack은 pop으로 데이터가 지워지는 일시적으로 데이터를 

저장하는 공간이지만, heap는 실제 값들이 저장된 공간이고 우리가 함수를 통해 이 실제 저장된 값들을 호출 할 수 있는 공간이다. 

*요약 : stack에 저장되는 값들은 일시적인 값들이고, heap에 저장되는 값들은 실제로 존재하는 값이다. 

 

참조 영상 및 블로그

www.youtube.com/watch?v=UcPuWY0wn3w

 

m.blog.naver.com/heartflow89/220954420688

 

 

[JAVA/자바] 메모리 구조(static, stack, heap)

이번 글은 자바(JAVA)를 사용하는 입장에서 알아야 할 메모리 구조 및 특징에 대해서 알아보려고 한다....

blog.naver.com

yaboong.github.io/java/2018/05/26/java-memory-management/

 

자바 메모리 관리 - 스택 & 힙

개요 Java 에서 메모리 관리는 어떻게 이루어지는지 알아보기 위함. Stack 과 Heap 영역 각 역할에 대해 알아본다. 간단한 코드예제와 함께 실제 코드에서 어떻게 Stack 과 Heap 영역이 사용되는지 살펴

yaboong.github.io

 

-----------------

이 밑으로는 완전히 이해하지 못해 헷갈리는 부분입니다.   개인적으로 나중에 알아보기 위해 정리해둔 부분이라 틀린 부분 일 수도 있어 참조하지 않는 걸 추천드립니다.

 Garbage Collection

 

------------------

 

main 메소드가 끝나면 stack 메모리도 pop이 일어나 다시 비어버린다

 Garbage Collection은 더 이상 저장된 값이 필요없다고 판단할때 지워버리는 프로그램인데 

car라는 항목은 heap안에 생성한 항목이라 stack에서 지워진다고 해서 사라지지 않는다.

그러나 car는 더 이상 호출하는 함수가 없고 필요없는 항목이라 판단되어 

 Garbage Collection에 의해 사라질 것 같다. 아마두

'웹 프로그래밍 > JAVA(이론 )' 카테고리의 다른 글

Interface의 이해 (JAVA)  (0) 2021.02.27
Inner class 의 이해 (member,static)  (0) 2021.02.16
Is-a 관계 Has-a관계의 이해  (0) 2021.02.14
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함