자바(Java) Heap영역과 Stack영역 정리

반응형


저번 글에서는 자바의 제어문인 조건문과 반복문에 대해서 정리해보았는데요. 


이번글에서는 객체와 배열을 하기전 기초지식으로 알아야 되는 Heap영역 Stack영역에 대해서 살짝 정리하고 넘어가보려고 합니다.


2015/08/17 - 자바 JDK 환경변수 설정하기


Heap영역과 Stack영역은 자바가상기계라고 부르는 JVM에서 사용되는 메모리 영역중 일부를 말하는데요. JVM은 저번 환경변수글에서 java.exe를 돌릴때 사용되는거라고 알고 있었습니다.



정적 메모리 스택(Stack) 영역



1. 스택 영역은 변수값을 저장하게 되는데 기본타입인 정수형 변수와 실수형 변수와 논리형 변수를 실제값으로 저장한다.

2. 크기가 정해져 있는 타입이다.

3. 메모리 할당시 컴파일할때 이미 계산이 이루어진다.

4. 메소드 작업이 종료되면 할당되었던 메모리 공간은 반환되어 비워진다.


 동적 메모리 힙(Heap) 영역



1. 힙 영역은 객체와 배열이 생성되는 공간이고 참조타입(배열, 열거, 클래스, 인터페이스)들을 힙영역에 주소형식으로 저장한다. 

2. 크기가 정해져 있지 않는 타입이다.

3. 메모리 할당시 프로그램을 실행할때 메모리를 빌려 동적으로 할당한다.

4. 참조하는 변수가 없다면 자동으로 힙 영역에서 제거 된다.



힙(Heap)과 스택(Stack)의 관계



그림을 먼저 보면 힙영역은 양쪽이 열려있고 스택영역은 한쪽이 막히고 위에서 부터 쌓이는 구조를 가집니다. 


Stack영역은 메소드를 호출할때 1번부터 2번, 3번순으로 프레임이 실행(Push)되지만 마지막에 제거(Pop)할때는 3번부터 2번, 1번순으로 제거됩니다.


Heap영역은 객체와 배열이 주소형식으로 저장되고요. 


단, Heap영역에서 참조타입 변수인 객체나 배열을 Null값으로 받으면 NullPointException이라는 예외가 떠서 사용할수가 없으니 당황하지 말고 변수값을 넣어주면 됩니다.

반응형