Wanna be Brilliant Full-Stack Developer

Java Static, Heap , Stack 이란? 본문

Some Memos/Java

Java Static, Heap , Stack 이란?

Flashpacker 2022. 2. 10. 18:13

메모리라는 영역이라는 개념

메모리란? 컴퓨터의 저장영역! 서랍처럼 구성되어있다.

이곳에 데이터를 넣을수 있다. 각자의 주소를 또한 가지고 있다. (저장영역) 

 

이 데이터를 가지고 연산을 하고 싶으면 CPU가 필요하다. ( 연산) 

메모리에서 데이터를 가져오고 연산된 값은 빈공간이 있다면 집어 넣는다.

 개념은 메모리는 저장영역, CPU는 연산, 출력은 모니터가하는것이다. 

메모리 영역은 단순히 큰 박스처럼 생겼는데 이 박스에

Java에서는 메모리 공간을 물리적인게 아니라 논리적으로 어디에서 어디까지는 Static 그 밑에는 Heap , 그 밑에는 Stack 논리적으로 영역을 이렇게 구분을 지어서 사용한다.

메모리는 논리적으로 영역을 구분한다

 

그러면 왜 논리적으로 구분하는가? 

게임을 한번 만들어보자 커피 빨리 마시기 게임!

1) 커피 머신이 필요하다.

2) 참가자가 필요하다. 참가자 1번이 커피 머신을 간다 

3) 커피를 받는다 from 커피머신

4) 커피를 마시기 (행위) 

원리 : 어떤 사람이 커피머신에 가서 커피를 하나 뽑고 커피를 마시는 행위를 하고 그 행위가 일어나는 동안 시간을 잰다 (시간 체크) 

커피머신, 커피, 참가자 , 시간체크(1,2,3,4,5초...) ,커피마시기 행위 다 메모리에 올라간다. 

모든것들이 메모리에 다올라와야 컴퓨터에서 연산을 하여 처리할수 있다.

 

커피머신은 게임이 시작되는 순간부터 언제까지 메모리에 있어야할까? 

시작전부터 끝까지 커피머신은 메모리에 떠있어야한다 

-> Static영역

 

Static 영역은 프로그램이 시작되기전부터 시작해서 전에 메모리에 필요한것들을 올리고 프로그램이 종료될때까지 이 커피머신을 메모리에 놓지 않고 쥐고있다. 왜냐하면 프로그램에 처음부터 끝까지 필요하니까 

정의 하자면 프로그램에 시작점부터 끝날때까지 존재하는 메모리 영역

Static영역 자체가 존재하는것이 아니라 커피머신이 메모리 static 영역에 들어가면 처음부터 끝까지 있어야한다는것!

Static은 부하가 크다 왜냐하면 처음부터 끝까지 있어야하기떄문

 

두번째 첫번째 참가자는 언제 만들어야하는가? 

참가자는 게임이 시작하고나서 부터 처음부터 만들어져야 있어야한다. 

처음 만들어져서 커피머신한테 가서 커피를 받고 커피를 마시고 커피를 다마시면 프르그램에서 1번 참가자는 더이상 필요하지 않기 떄문에 TV화면에 1번참가자는 3초 , 2번 참가자는 5초 기록만 남는다면 

1번 참가자는 커피를 마신후 더이상 필요없기 때문에 Static영역에 둘수 없는데

이렇게 동적으로 메모리에 떴다가 어느순간 사라지는 메모리는 Heap 영역에 둔다!

1번참가자는 처음 시작때만들어지고 커피를 마신후 기록을 적는순간 사라지는 동적 메모리 (Heap 영역)

1번이 사라지면 2번참가자가 등장하면 Heap영역에 띄운다 

Heap영역은 동적할당영역! 프로그램이 처음 시작할떄부터 해야하는것이 아니라

프로그램  실행 도중에 내가 원할떄 띄울수 있는 영역이 HEAP영역이다! 

1번과 2번 참가자는 각 커피 마시기 행위후 기록이 전광판에 기록되면 HEAP영역에서 사라진다!

그러면 커피는 어디 영역에 갈까요? 커피는 언제 메모리에 뜨는가?

1번 참가자가 커피 머신으로 가서 커피를 받을떄 메모리에 뜨는데

커피도  Heap영역, 사라지는것도 커피마시는 행위가 끝나면 사라진다.

2번째 참가자가 들어올때도 커피행위가 끝나면 또 사라진다.  

HEAP영역은 메모리가 자주 생성과 제거가 반복되기떄문에 생명주기가 Static 보다 짧다. 
만약에 1번 참가자가 Static에 있으면 자신의 모든 행위가 끝나도 Static 영역에 띄어 있기 떄문에 Static영역에 불필요하다.

 

Stack영역은 잠깐 떴다가 사라지는것들 ex) 커피마시기 (행위) 

행위에 대한 어떤 정보들이 Stack에 저장이 된다.

1번 참가자 등장 하는순간 Heap영역에 가서 커피(Heap2) 를 받아오고 1번참가자가 커피를 마신다 그러면 그 시간을 기억해야하는데 그 마시는 시점이 2022년 2월 10일 오후 6시 2분 10초 정보를 Stack 영역에 저장해서 커피 마시는 행위가 끝나는 시점과 비교를 해야하기때문

커피 마시는 행위가 끝나는 순간 2022년 2월 10일 오후 6시 2분 15초 가 저장이 되고 연산을 하게 되는데 끝나는점과 시작점을 -해서 TV화면에 5초를 기록하면 Stack 영역에 있는 그 기록은 바로삭제된다. 

 

Stack영역에 있는 데이터가 가장 짧다! 

커피 마시는 행위가 시작되는 동안 필요한 데이터는 전부다 Stack 

끝나면 1번참가 종료( Heap영역에서 ) 시간데이터 Stack영역에서 종료

Stack영역이 heap영역보다 유지 시간이 짧다.

정리: 커피머신은 가장 오랫동안 , Heap은 1번참가자가 게임을 잠깐 참여하는동안만 , Stack영역은 1번참가자가 커피를 마시는 행위를 할때만 메모리에 떠있다. 

처음부터 끝까지 떠있어야하는건 STATIC , 중간에 잠깐 떳다고 사라지는건 Heap, Stack 행위가 있는 시간에만 떠있는것!

프로그램은 Static , Heap , Stack 영역은 무겁고 , 덜무겁고 ,가볍고 

세가지 영역을 나눠서 사용하는 문법들이 많다. 전부다 이 개념에서 탄생하였기 떄문에 이개념만 머리에 잡고있으면 자바를 쉽게 배울 수 있다.!!

'Some Memos > Java' 카테고리의 다른 글

2/14 Java 자료형 메모리 구조 개념 익히기!  (0) 2022.02.15
Java 개념정리! 자료형은 무엇인가?  (0) 2022.02.12
SpringBoot JPA란?  (0) 2022.02.10
Java 컴파일과 실행원리  (0) 2022.02.09
JDK 환경변수란??  (0) 2022.02.09